In diesem Projekt gibt es eine Klasse, die ADO.NET für gemeinsamen Datenzugriff wie ExecuteDataReader
, ExecuteScalar
, etc Wraps.Wie übergeben Sie Byte [] von C# als Zeichenfolge an SQL Server gespeicherte Prozedur und konvertieren in Varbinary (MAX)
Wenn diese Verfahren unter Verwendung einer gespeicherten Prozedur aufzurufen, ermöglicht es Ihnen eine Dictionary<string, string>
von Parametern (String key, String-Wert), der als SqlParameter
zum SqlCommand
Objekt hinzugefügt werden dann zu übergeben.
Es gibt einen Fall, in dem wir ein Dokument in der Datenbank speichern müssen. Das Dokument ist ein byte[]
und die entsprechende Spalte in der Datenbank ist varbinary(MAX)
.
Wir haben uns nach einer Lösung umgeschaut, aber es gibt nur Beispiele, die SqlDbType.Varbinary
verwenden, was in dieser Situation keine Option ist.
Unsere neueste Versuch, um zu versuchen, war die byte[]
in eine binäre Zeichenfolge zu konvertieren, übergeben sie in die gespeicherte Prozedur als nvarchar(max)
und dann CONVERT(varbinary(max), @theFileBinaryString)
zu verwenden, wenn es um die Document
Tabelle zu speichern, jedoch spart dies eine beschädigte Datei.
C#
byte[] pDocumentBytes = ...;
string documentAsBinary = "0x" + BitConverter.ToString(pDocumentBytes).Replace("-", "");
SQL
@DocumentContentAsBinary nvarchar(max) -- This is "documentAsBinary" from C# above
DECLARE @DocumentContentVarbinary varbinary(max);
SET @DocumentContentVarbinary = CONVERT(varbinary(max), @DocumentContentAsBinary);
Vielen Dank für Ihre Antwort. Leider haben wir nicht die volle Kontrolle über das SqlCommand-Objekt und müssen die Datei als nvarchar (max) übergeben. – thiag0