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:
"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
Hallo,
arbeite mit Parameters dann hast du solche Probleme nicht. Es gibt schon Threads im Forum darüber, such mal.
**:::
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
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ß.