Laden...

Fehler beim schreiben eines byte-Arrays in die Datenbank

Erstellt von Echo]6[ vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.542 Views
E
Echo]6[ Themenstarter:in
111 Beiträge seit 2006
vor 14 Jahren
Fehler beim schreiben eines byte-Arrays in die Datenbank

verwendetes Datenbanksystem: SQL Server 2005

Schönen guten Tag,

ich versuche gerade eine Zeile aus einer DataTable per SQL-Statement in die Datenbank zu schreiben, doch es will leider noch nich so recht klappen.

Die Tabelle besteht aus drei Spalten:

  1. DokGuid (Uniqueidentifier)
  2. DokBezeichnung (nvarchar(50))
  3. DokDatei (varbinary(max))

"INSERT INTO tblDokumente (DokGuid, DokBezeichnung, DokDatei) VALUES ('" + Guid.NewGuid() + "', '" + dtDok["DokBezeichnung"] + "', '" + dtDok["DokDatei"] + "')";

Führe ich dieses Statement aus, so bekomme ich folgende Fehlermeldung:

"System.Data.SqlClient.SqlException: Die implizite Konvertierung vom varchar-Datentyp in varbinary(max) ist nicht zulässig. Verwenden Sie die CONVERT-Funktion, um diese Abfrage auszuführen."

Was müsste ich machen, damit ich so meine Datei in die Datenbank schreiben kann?

Vielen Dank schonmal im Voraus!

Gruß
Echo

1.696 Beiträge seit 2006
vor 14 Jahren

Hallo,

arbeite mit Parameters dann hast du solche Probleme nicht. Es gibt schon Threads im Forum darüber, such mal.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

E
Echo]6[ Themenstarter:in
111 Beiträge seit 2006
vor 14 Jahren

Hi!

Ich arbeite mit den Datenbankubhängigen Klassen, wie z.B. DbCommand und habe dazu nochmal eine Frage.

Wenn ich direkt mit den Sql-Klassen arbeite, sprich ich gebe sowas an:


SqlCommand cmd = new SqlCommand();
cmd.CommandText = _Statement;
cmd.Connection = conn;

cmd.Parameters.AddWithValue("@Spalte1", "Spalte1").Value = Mein byte-Array;

Das obige Beispiel klappt einwandfrei, wie realiesiere ich das für datenunabhängige Klasse?

Wenn ich "DbCommand" die "Parameters.Add"-Methode nehme, kann ich nur den Spaltennamen setzen und nicht auch den Parameternamen.

Mache ich da vielleicht etwas falsch?

MfG
Echo

1.564 Beiträge seit 2007
vor 14 Jahren

Hi

Du kannst auch bei untypisierten Datenquellen mit Parametern arbeiten. Ist nur nicth so schick wie bei typisierten 😉.

Ich hab's jetzt nicht getestet, aber das sollte funktionieren:

         DbCommand cmd = cn.CreateCommand();

         cmd.CommandText = "INSERT INTO AnyTable (Id, FldText, FldBin) SELECT ?, ?, ?";
         cmd.CommandType = CommandType.Text;

         DbParameter p1 = cmd.CreateParameter();
         p1.DbType = DbType.Int32;
         p1.Value = 1;

         DbParameter p2 = cmd.CreateParameter();
         p2.DbType = DbType.String;
         p2.Size = 256;
         p2.Value = "Hello World";

         DbParameter p3 = cmd.CreateParameter();
         p3.DbType = DbType.Binary;
         p3.Size = int.MaxValue;
         p3.Value = new byte[] { 0x01, 0x02 };

         cmd.Parameters.Add(p1);
         cmd.Parameters.Add(p2);
         cmd.Parameters.Add(p3);

         cmd.ExecuteNonQuery();

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.