Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy mogę użyć strumienia, aby WSTAWIĆ lub UAKTUALNIĆ wiersz w programie SQL Server (C#)?

Powinieneś być w stanie przekazać instancję SqlBytes jako parametr do SqlCommand gdziekolwiek varbinary jest potrzebne. Te same SqlBytes klasa ma przeciążenie konstruktora, które otacza Stream . Więc po prostu utwórz SqlBytes instancję ze strumienia, a następnie przekaż ją jako wartość parametru.

Innymi słowy, dopasuj to do poprawionego kodu, zamiast tego:

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);

Użyj tego:

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);

Oczywiście nie zapomnij pozbyć się MemoryStream i wszystkie te inne IDisposable wystąpień po wykonaniu polecenia.

Edycja:OK, właśnie widziałem dół twojej edycji, co sugeruje, że dane są bardzo duże i nie chcesz, aby trafiły do ​​pamięci, a to w rzeczywistości nie rozwiąże tego problemu. Chodzi o to, że jeśli wartość jest tak duża, złym pomysłem jest przechowywanie jej w varbinary kolumna na pierwszym miejscu.

Jeśli używasz SQL Server 2008, możesz (i powinieneś!) zamiast tego użyć FILESTREAM. To faktycznie działa obsługuje "prawdziwe" strumieniowanie w ADO.NET przez klasę SqlFileStream.

Jeśli nie możesz użyć FILESTREAM pamięci masowej, obawiam się, że w pewnym momencie będziesz musiał poradzić sobie z danymi znajdującymi się w pamięci, tak właśnie działa 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. Sposoby odzyskiwania danych z pliku dziennika transakcji programu SQL Server

  2. Jak dodać niestandardowe atrybuty do ciągu połączenia SQL?

  3. Przykład prostej instrukcji scalania w SQL Server

  4. DBA — jak zabić wszystkie procesy bazy danych na serwerze SQL?

  5. SQL Server:maksymalna liczba wierszy w tabeli