Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bisakah saya menggunakan aliran untuk INSERT atau UPDATE baris di SQL Server (C#)?

Anda harus dapat meneruskan instance SqlBytes sebagai parameter ke SqlCommand di mana pun varbinary dibutuhkan. SqlBytes yang sama itu kelas memiliki kelebihan konstruktor yang membungkus Stream . Jadi cukup buat SqlBytes instance dari aliran, lalu berikan itu sebagai nilai parameter.

Dengan kata lain, masukkan itu ke dalam kode revisi Anda, alih-alih ini:

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

Gunakan ini:

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

Tentu saja, jangan lupa untuk membuang MemoryStream dan semua IDisposable lainnya ini instance setelah perintah dieksekusi.

Sunting:Oke, saya baru saja melihat bagian bawah hasil edit Anda, yang menyiratkan bahwa datanya sangat besar dan Anda tidak ingin itu berakhir di memori, dan ini sebenarnya tidak akan menyelesaikan masalah itu. Masalahnya, jika nilainya sebesar itu, sebaiknya disimpan di varbinary kolom di tempat pertama.

Jika Anda menggunakan SQL Server 2008, Anda dapat (dan harus!) menggunakan FILESTREAM sebagai gantinya. Ini sebenarnya memang mendukung streaming "benar" di ADO.NET melalui kelas SqlFileStream.

Jika Anda tidak dapat menggunakan FILESTREAM penyimpanan, maka saya khawatir Anda harus berurusan dengan data yang ada di memori pada suatu saat, begitulah cara kerja 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. Temukan catatan sql yang berisi string serupa

  2. Masukkan seluruh DataTable ke dalam database sekaligus, bukan baris demi baris?

  3. Bagaimana menjalankan kueri yang sama pada semua database pada sebuah instance?

  4. SQL Server:UPDATE tabel dengan menggunakan ORDER BY

  5. Sesuaikan Alarm Awan Spotlight