Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Мога ли да използвам поток за ВМЪКВАНЕ или АКТУАЛИЗИРАНЕ на ред в SQL Server (C#)?

Трябва да можете да предавате екземпляр от SqlBytes като параметър към SqlCommand където и да е varbinary е необходимо. Същият SqlBytes class има претоварване на конструктора, което обвива Stream . Затова просто създайте SqlBytes екземпляр от потока, след което го предайте като стойност на параметъра.

С други думи, вмъкване на това във вашия преработен код, вместо това:

MemoryStream _MemoryStream = new System.IO.MemoryStream();
_Image.Save(_MemoryStream, _ImageFormat);
SqlParameter _SqlParameter = new 
    SqlParameter("@" + _ImageFieldName, SqlDbType.Image);
_SqlParameter.Value = _MemoryStream.ToArray();
_SqlCommand.Parameters.Add(_SqlParameter);

Използвайте това:

MemoryStream _MemoryStream = new System.IO.MemoryStream();
_Image.Save(_MemoryStream, _ImageFormat);
_MemoryStream.Position = 0;  // I *think* you need this
SqlParameter _SqlParameter = new 
    SqlParameter("@" + _ImageFieldName, SqlDbType.VarBinary);
_SqlParameter.Value = new SqlBytes(_MemoryStream);
_SqlCommand.Parameters.Add(_SqlParameter);

Разбира се, не забравяйте да изхвърлите MemoryStream и всички тези други IDisposable екземпляри, след като командата е била изпълнена.

Редактиране:Добре, току-що видях долната част на вашата редакция, което предполага, че данните са изключително големи и не искате те да свършват в паметта и това всъщност няма да реши този проблем. Работата е там, че ако стойността е толкова голяма, е лоша идея да я съхранявате в varbinary колона на първо място.

Ако използвате SQL Server 2008, можете (и трябва!) да използвате FILESTREAM вместо това. Това всъщност прави поддържа "истински" стрийминг в ADO.NET през класа SqlFileStream.

Ако не можете да използвате FILESTREAM за съхранение, тогава се опасявам, че ще трябва да се справите с данните, които са в паметта в даден момент от време, до голяма степен така работи ADO.NET.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напиша UPDATE SQL с псевдоним на таблица в SQL Server 2008?

  2. Sql Server задейства вмъкване на стойности от нов ред в друга таблица

  3. Как да изключа дните на уикенда в заявка на SQL Server?

  4. Разбиране на анализатора на работното натоварване за картографиране на тесните места в производителността

  5. Как да коригирате „Преобразуването не бе успешно при преобразуване на стойността в тип данни“ в SQL Server