Die SQL Server-Datenbank zeigt nicht-englische Zeichen als „????“ an. auch wenn der Datentyp NVARCHAR verwendet wirdC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Die SQL Server-Datenbank zeigt nicht-englische Zeichen als „????“ an. auch wenn der Datentyp NVARCHAR verwendet wird

Post by Anonymous »

Ich erstelle eine Angular- und C#-.NET-App. Ich habe ein Problem mit nicht-englischen Zeichen, die in meiner Datenbank gespeichert sind.
Das ist mein Code:

Code: Select all

public async Task  CreateRegCaseCustomerDocumentAsync(string title, string description, string fileName, string contentType, byte[] content, Guid regCaseSourceId, Guid customerDocumentTypeSourceId, int? taskId = null, int? stage = null)
{
var query = "[document].[CreateRegCaseCustomerDocument]";

var documentTable = new DataTable();
documentTable.Columns.Add("@fileName", typeof(string));
documentTable.Columns.Add("@title", typeof(string));
documentTable.Columns.Add("@description", typeof(string));
documentTable.Columns.Add("@contentType", typeof(string));
documentTable.Columns.Add("@customerDocumentTypeSourceId", typeof(Guid));
documentTable.Columns.Add("@content", typeof(byte[]));
documentTable.Columns.Add("@taskId", typeof(int));
documentTable.Columns.Add("@stage", typeof(int));

documentTable.Rows.Add(fileName, title, description, contentType, customerDocumentTypeSourceId, content, taskId, stage);

var parameters = new DynamicParameters(new
{
_currentUser.CustomerId,
_currentUser.UserId,
regCaseSourceId,
documentInput = documentTable.AsTableValuedParameter("[document].[DocumentInput_12]"),
_currentUser.CustomEntityId
});

var result = await _dataAccessService.ExecuteScalarAsync(
DataSource.Customer,
query,
parameters,
CommandType.StoredProcedure);

return result;
}
Und in meiner gespeicherten Prozedur habe ich NVARCHAR nur für Titel und Dateinamen verwendet:

Code: Select all

CREATE PROCEDURE [document].[CreateRegCaseCustomerDocument]
@customerId UNIQUEIDENTIFIER,
@userId UNIQUEIDENTIFIER,
@regCaseSourceId UNIQUEIDENTIFIER,
@documentInput [document].[DocumentInput_12] READONLY,
@customEntityId UNIQUEIDENTIFIER
AS
BEGIN
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

BEGIN TRY

BEGIN TRAN SaveDocument

DECLARE @regCaseId INT = (SELECT RegCaseId
FROM [regflow].[RegCase] RC
WHERE RC.RegCaseSourceId = @regCaseSourceId
AND RC.CustomEntitySourceId = @customEntityId);

IF @regCaseId IS NULL
THROW 50001, 'RegCase does not exist.', 1;

SELECT @regCaseId = RegcaseId
FROM [regflow].[regcase]
WHERE CustomerId = @customerId
AND CustomEntitySourceId = @customEntityId
AND RegCaseSourceId = @regCaseSourceId
AND IsDeleted = 0;

-- Iterate through each row in the TVP and insert documents
CREATE TABLE #DocumentRow
(
CustomerDocumentSourceId UNIQUEIDENTIFIER,
[Title] NVARCHAR(250)
);

CREATE TABLE #DocumentInput
(
[FileName] NVARCHAR(250),
[Title] NVARCHAR(250),
[Description] VARCHAR(MAX),
ContentType VARCHAR(250),
CustomerDocumentTypeSourceId UNIQUEIDENTIFIER,
Content VARBINARY(MAX),
TaskId INT,
Stage INT,
CustomerDocumentSourceId UNIQUEIDENTIFIER NULL
)

INSERT INTO #DocumentInput([FileName], [Title], [Description], ContentType, CustomerDocumentTypeSourceId, Content, TaskId, Stage)
SELECT
CAST([FileName] AS NVARCHAR(250)), CAST([Title] AS NVARCHAR(250)),
[Description], ContentType, CustomerDocumentTypeSourceId,
Content, TaskId, Stage
FROM
@documentInput

-- Insert document metadata for each document in the temp table
INSERT INTO [document].[CustomerDocumentMetadata]
(CustomerId, CustomerDocumentTypeId, [FileName], Title, [Description], ContentType, CreatedBy, UpdatedBy, CustomEntitySourceId)
OUTPUT inserted.CustomerDocumentSourceId, inserted.[Title] INTO #DocumentRow
SELECT
@customerId,
(SELECT CustomerDocumentTypeId
FROM [document].[CustomerDocumentType]
WHERE CustomerDocumentTypeSourceId = DI.CustomerDocumentTypeSourceId) AS CustomerDocumentTypeId,
DI.[FileName], DI.Title, DI.[Description], DI.ContentType,
@userId, @userId,  @customEntityId
FROM
@documentInput DI;

UPDATE D
SET D.CustomerDocumentSourceId = DR.CustomerDocumentSourceId
FROM #DocumentInput D
INNER JOIN #DocumentRow DR ON DR.Title = D.Title

-- Insert the document content for each document
INSERT INTO [document].[CustomerDocumentContent] (CustomerDocumentId, Content)
SELECT
CD.CustomerDocumentId,
DI.Content
FROM
[document].[CustomerDocumentMetadata] CD
INNER JOIN
#DocumentInput DI ON DI.CustomerDocumentSourceId = CD.CustomerDocumentSourceId
WHERE
CD.CustomerId = @customerId
AND CD.CustomEntitySourceId = @customEntityId
AND CD.IsDeleted = 0

-- Insert relationships into the RegCaseRel table
INSERT INTO [document].[CustomerDocumentRegCaseRel]
(RegCaseId, TaskId, Stage, CustomerDocumentId, CreatedBy, UpdatedBy)
SELECT
@regCaseId,
DI.TaskId, DI.Stage,
CD.CustomerDocumentId,
@userId, @userId
FROM
[document].[CustomerDocumentMetadata] CD
INNER JOIN
#DocumentInput DI ON DI.CustomerDocumentSourceId = CD.CustomerDocumentSourceId
WHERE
CD.CustomerId = @customerId
AND CD.CustomEntitySourceId = @customEntityId
AND CD.IsDeleted = 0

Code: Select all

[document].[DocumentInput_12]
Typ:

Code: Select all

CREATE TYPE [document].[DocumentInput_12] AS TABLE
(
[FileName] NVARCHAR(250),
[Title] NVARCHAR(250),
[Description] VARCHAR(MAX),
ContentType VARCHAR(250),
CustomerDocumentTypeSourceId UNIQUEIDENTIFIER,
Content VARBINARY(MAX),
TaskId INT,
Stage INT
)
In der API-Anfrage habe ich „Щодо+внесення+змін+до+“ als Dateinamen verwendet. Titel und Dateiname werden weiterhin als „????“ in der SQL Server-Datenbanktabelle gespeichert. Ich brauche dabei Ihre Unterstützung.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post