Мне нужно загрузить и обновить байты файла из C# в SQL, но я получаю сообщение об ошибке ниже в C#.
Microsoft.Data.SqlClient.SqlException: 'Неявное преобразование из типа данных nvarchar( max) в varbinary(max) не допускается. Используйте функцию CONVERT для выполнения этого запроса.'
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
MS SQL
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 ... er-defined
Ошибка при передаче данных из кода .NET в форме объекта в тип таблицы, определяемый пользователем MS SQL ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение