sql >> Databáze >  >> RDS >> Sqlserver

Mohu použít stream k VLOŽENÍ nebo AKTUALIZACI řádku na serveru SQL Server (C#)?

Měli byste být schopni předat instanci SqlBytes jako parametr pro SqlCommand kdekoli varbinary je potřeba. To samé SqlBytes třída má přetížení konstruktoru, který obaluje Stream . Jednoduše tedy vytvořte SqlBytes instance ze streamu, pak ji předejte jako hodnotu parametru.

Jinými slovy, vložte to do vašeho revidovaného kódu místo tohoto:

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

Použijte toto:

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

Samozřejmě nezapomeňte zlikvidovat MemoryStream a všechny tyto další IDisposable instance po provedení příkazu.

Edit:OK, právě jsem viděl spodní část vaší úpravy, která naznačuje, že data jsou extrémně velká a nechcete, aby skončila v paměti, a to ve skutečnosti tento problém nevyřeší. Věc se má tak, že pokud je hodnota tak velká, je špatný nápad ji ukládat do varbinary sloupec na prvním místě.

Pokud používáte SQL Server 2008, můžete (a měli byste!) místo toho použít FILESTREAM. To ve skutečnosti dělá podporují "pravé" streamování v ADO.NET prostřednictvím třídy SqlFileStream.

Pokud nemůžete použít FILESTREAM úložiště, pak se obávám, že se budete muset vypořádat s tím, že data jsou v určitém okamžiku v paměti, přesně tak ADO.NET funguje.



  1. Naučte se používat databázi MySQL

  2. SQLiteException:neznámá databáze

  3. Jak dát pozici nula spinneru rychlou hodnotu?

  4. Django cache.set() způsobuje chybu duplicitního klíče