sql >> Database >  >> RDS >> Sqlserver

Kan ik een stream gebruiken om een ​​rij in SQL Server (C#) IN te VOEREN of BIJWERKEN?

U zou een instantie van SqlBytes . moeten kunnen doorgeven als een parameter voor een SqlCommand waar een varbinary is nodig. Diezelfde SqlBytes klasse heeft een overbelasting van de constructor die een Stream omhult . Maak dus eenvoudig een SqlBytes instantie uit de stream en geef die dan door als parameterwaarde.

Met andere woorden, pas dat in uw herziene code, in plaats van dit:

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

Gebruik dit:

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

Vergeet natuurlijk niet om de MemoryStream . weg te gooien en al deze andere IDisposable instanties nadat de opdracht is uitgevoerd.

Bewerken:OK, ik zag net de onderkant van je bewerking, wat inhoudt dat de gegevens extreem groot zijn en dat je niet wilt dat ze in het geheugen terechtkomen, en dit zal dat probleem niet echt oplossen. Het punt is, als de waarde zo groot is, is het een slecht idee om het op te slaan in een varbinary kolom op de eerste plaats.

Als u SQL Server 2008 gebruikt, kunt u (en moet!) in plaats daarvan FILESTREAM gebruiken. Dit doet eigenlijk ondersteunt "echte" streaming in ADO.NET via de SqlFileStream-klasse.

Als u FILESTREAM niet kunt gebruiken opslag, dan ben ik bang dat je op een bepaald moment te maken krijgt met de gegevens in het geheugen, dat is ongeveer hoe ADO.NET werkt.



  1. Hoe de LIKE-operator werkt in MariaDB

  2. Taal voor SQL-gegevensbesturing

  3. MySQL Databases vergelijken

  4. Hoe voeg ik de identiteitseigenschap toe aan een bestaande kolom in SQL Server?