Мне нужно загрузить и обновить байты файла из 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#
Место общения программистов C#
1733508028
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 является [b]usp_UpdateEODData_U[/b]
а ниже приведено определение 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
Подробнее здесь: [url]https://stackoverflow.com/questions/79258936/error-while-data-passing-from-net-code-in-form-of-object-to-ms-sql-user-defined[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия