Мне нужно загрузить и обновить байты файла из C# в SQL Server, но я получаю эту ошибку в C#:
Microsoft.Data.SqlClient. SqlException: 'Неявное преобразование типа данных nvarchar(max) в varbinary(max) не разрешено. Используйте функцию CONVERT для выполнения этого запроса.'
Код C#:
public async Task UpdateBulkData(IList eods)
{
string strTrace = MethodLogger.GetExecutionInfo(MethodBase.GetCurrentMethod());
logger.LogDebug($"Executing {strTrace} with parameter : {JsonSerializer.Serialize(eods)}");
string sqlQuery = $"{StoredProcedures.UPDATE_BULK_EOD} @EODS";
var paramEods = new SqlParameter() { ParameterName = "@EODS", Value = eods.ToDataTable(), SqlDbType = SqlDbType.Structured, TypeName = "EODType" };
await sqlExecutor.ExecuteSqlRawAsync(sqlQuery, [paramEods]);
return true;
}
Здесь значением StoredProcedures.UPDATE_BULK_EOD является usp_UpdateEODData_U.
Это определение модели EodUpdateDto класс:
public class EodUpdateDto
{
public int Id { get; set; }
public string ActionBy { get; set; } = default!;
public bool Accepted { get; set; }
public bool VerifySelfPay { get; set; }
public string Claim { get; set; } = default!;
public bool OnHold { get; set; }
public string HoldReason { get; set; } = default!;
public string AttachFileName { get; set; } = default!;
public string AttachFileType { get; set; } = default!;
public string? AttachFileContent { get; set; } = default!;
}
Вот конструкция пользовательского типа таблицы SQL Server:
CREATE TYPE [dbo].[EODType] AS TABLE
(
[ID] [int] NULL,
[ActionBy] [varchar](200) NOT NULL,
[Accepted] [bit] NULL,
[VerifySelfPay] [bit] NULL,
[Claim] [varchar](50) NULL,
[OnHold] [bit] NULL,
[HoldReason] [varchar](200) NULL,
[AttachFileName] [varchar](300) NULL,
[AttachFileContent] [varbinary](max) NULL,
[AttachFileType] [varchar](50) NULL
)
Это хранимая процедура, в которую передаются данные:
ALTER PROCEDURE [dbo].[usp_UpdateEODData_U]
@EODS [dbo].[EODType] READONLY
AS
BEGIN
SET NOCOUNT ON;
UPDATE EOD
SET
Accepted = E2.Accepted,
VerifySelfPay = E2.VerifySelfPay,
Claim = E2.Claim,
OnHold = E2.OnHold,
HoldReason = E2.HoldReason,
HoldDate = IIF(E2.HoldReason IS NOT NULL, dbo.GetDateEST(), null),
AttachFileName = E2.AttachFileName,
AttachFileContent = E2.AttachFileContent,
AttachFileType = E2.AttachFileType,
ActionBy = E2.ActionBy
FROM EOD E1
INNER JOIN @EODS E2 ON E1.ID = E2.ID;
END
Подробнее здесь: https://stackoverflow.com/questions/792 ... r-user-def
Ошибка при передаче данных из кода .NET в виде объекта в пользовательский тип таблицы SQL Server. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение