Привет, я новичок в C#, у меня есть сомнения по поводу моего кода. На самом деле я пытаюсь сделать это, когда загружаю вложение на уровне экрана, поэтому эта функция сохранит его в моей таблице БД. Но сейчас происходит то, что пользователь может свободно загружать столько вложений, сколько он хочет. В моем проекте есть 5 вложений, если пользователь загрузит только 1 вложение, остальные станут нулевыми. Но теперь происходит следующее: когда он пытается выполнить процедуру сохранения, я получил эту ошибку. Я не уверен, почему он не принял значение null.
Это мой код C#
public ActionResult SaveFile(HttpPostedFileBase file, int senderId, int pictureNumber, DocumentUpload docUpload)
{
if (file != null && file.ContentLength > 0)
{
byte[] fileData;
using (var binaryReader = new BinaryReader(file.InputStream))
{
fileData = binaryReader.ReadBytes(file.ContentLength);
}
switch (pictureNumber)
{
case 1:
docUpload.Picture1 = fileData;
break;
case 2:
docUpload.Picture2 = fileData;
break;
case 3:
docUpload.Picture3 = fileData;
break;
case 4:
docUpload.Picture4 = fileData;
break;
case 5:
docUpload.Picture5 = fileData;
break;
}
var result = _storedProcedureService.GetWithRawSql(
"exec sp_UpdateDocumentUpload @p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7",
senderId,
docUpload.Picture1 ?? (object)DBNull.Value,
docUpload.Picture2 ?? (object)DBNull.Value,
docUpload.Picture3 ?? (object)DBNull.Value,
docUpload.Picture4 ?? (object)DBNull.Value,
docUpload.Picture5 ?? (object)DBNull.Value,
Convert.ToInt32(Session["EntityId"]),
DateTime.Now
);
return Json(new { success = true });
}
return Json(new { success = false, message = "No file provided" });
}
И это моя процедура сохранения
ALTER PROCEDURE [dbo].[sp_UpdateDocumentUpload]
@SenderId INT,
@Picture1 VARBINARY(MAX) = NULL,
@Picture2 VARBINARY(MAX) = NULL,
@Picture3 VARBINARY(MAX) = NULL,
@Picture4 VARBINARY(MAX) = NULL,
@Picture5 VARBINARY(MAX) = NULL,
@CreatedBy INT = null,
@CreationDate DATETIME = null
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT * FROM DocumentUpload WHERE SenderId = @SenderId)
BEGIN
UPDATE DocumentUpload
SET
Picture1 = COALESCE(@Picture1, Picture1),
Picture2 = COALESCE(@Picture2, Picture2),
Picture3 = COALESCE(@Picture3, Picture3),
Picture4 = COALESCE(@Picture4, Picture4),
Picture5 = COALESCE(@Picture5, Picture5),
CreatedBy = @CreatedBy,
CreationDate = @CreationDate
WHERE SenderId = @SenderId;
END
ELSE
BEGIN
INSERT INTO DocumentUpload (SenderId, Picture1, Picture2, Picture3, Picture4, Picture5, CreatedBy, CreationDate)
VALUES (@SenderId, @Picture1, @Picture2, @Picture3, @Picture4, @Picture5, @CreatedBy, @CreationDate);
END
END
В моем модуле я использовал тот же тип данных
public class DocumentUpload : Entity
{
public int SenderId { get; set; }
public byte[] Picture1 { get; set; }
public byte[] Picture2 { get; set; }
public byte[] Picture3 { get; set; }
public byte[] Picture4 { get; set; }
public byte[] Picture5 { get; set; }
public Nullable CreatedBy { get; set; }
public Nullable CreationDate { get; set; }
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... allowed-us
Неявное преобразование типа данных nvarchar в varbinary(max) не допускается. Используйте функцию CONVERT для запуска это ⇐ C#
Место общения программистов C#
1727140963
Anonymous
Привет, я новичок в C#, у меня есть сомнения по поводу моего кода. На самом деле я пытаюсь сделать это, когда загружаю вложение на уровне экрана, поэтому эта функция сохранит его в моей таблице БД. Но сейчас происходит то, что пользователь может свободно загружать столько вложений, сколько он хочет. В моем проекте есть 5 вложений, если пользователь загрузит только 1 вложение, остальные станут нулевыми. Но теперь происходит следующее: когда он пытается выполнить процедуру сохранения, я получил эту ошибку. Я не уверен, почему он не принял значение null.
Это мой код C#
public ActionResult SaveFile(HttpPostedFileBase file, int senderId, int pictureNumber, DocumentUpload docUpload)
{
if (file != null && file.ContentLength > 0)
{
byte[] fileData;
using (var binaryReader = new BinaryReader(file.InputStream))
{
fileData = binaryReader.ReadBytes(file.ContentLength);
}
switch (pictureNumber)
{
case 1:
docUpload.Picture1 = fileData;
break;
case 2:
docUpload.Picture2 = fileData;
break;
case 3:
docUpload.Picture3 = fileData;
break;
case 4:
docUpload.Picture4 = fileData;
break;
case 5:
docUpload.Picture5 = fileData;
break;
}
var result = _storedProcedureService.GetWithRawSql(
"exec sp_UpdateDocumentUpload @p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7",
senderId,
docUpload.Picture1 ?? (object)DBNull.Value,
docUpload.Picture2 ?? (object)DBNull.Value,
docUpload.Picture3 ?? (object)DBNull.Value,
docUpload.Picture4 ?? (object)DBNull.Value,
docUpload.Picture5 ?? (object)DBNull.Value,
Convert.ToInt32(Session["EntityId"]),
DateTime.Now
);
return Json(new { success = true });
}
return Json(new { success = false, message = "No file provided" });
}
И это моя процедура сохранения
ALTER PROCEDURE [dbo].[sp_UpdateDocumentUpload]
@SenderId INT,
@Picture1 VARBINARY(MAX) = NULL,
@Picture2 VARBINARY(MAX) = NULL,
@Picture3 VARBINARY(MAX) = NULL,
@Picture4 VARBINARY(MAX) = NULL,
@Picture5 VARBINARY(MAX) = NULL,
@CreatedBy INT = null,
@CreationDate DATETIME = null
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT * FROM DocumentUpload WHERE SenderId = @SenderId)
BEGIN
UPDATE DocumentUpload
SET
Picture1 = COALESCE(@Picture1, Picture1),
Picture2 = COALESCE(@Picture2, Picture2),
Picture3 = COALESCE(@Picture3, Picture3),
Picture4 = COALESCE(@Picture4, Picture4),
Picture5 = COALESCE(@Picture5, Picture5),
CreatedBy = @CreatedBy,
CreationDate = @CreationDate
WHERE SenderId = @SenderId;
END
ELSE
BEGIN
INSERT INTO DocumentUpload (SenderId, Picture1, Picture2, Picture3, Picture4, Picture5, CreatedBy, CreationDate)
VALUES (@SenderId, @Picture1, @Picture2, @Picture3, @Picture4, @Picture5, @CreatedBy, @CreationDate);
END
END
В моем модуле я использовал тот же тип данных
public class DocumentUpload : Entity
{
public int SenderId { get; set; }
public byte[] Picture1 { get; set; }
public byte[] Picture2 { get; set; }
public byte[] Picture3 { get; set; }
public byte[] Picture4 { get; set; }
public byte[] Picture5 { get; set; }
public Nullable CreatedBy { get; set; }
public Nullable CreationDate { get; set; }
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79013729/implicit-conversion-from-data-type-nvarchar-to-varbinarymax-is-not-allowed-us[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия