Ошибка при передаче данных из кода .NET в форме объекта в тип таблицы, определяемый пользователем MS SQLC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка при передаче данных из кода .NET в форме объекта в тип таблицы, определяемый пользователем MS SQL

Сообщение Anonymous »

Мне нужно загрузить и обновить байты файла из 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»