pcfjkg
Goto Top

Dbnull.value als NULL in SQL-Server speichern

VB 2010
Ein SQLCommand enthält den Command.text If(IsDBNull(... ein Datentyp integer .. )), DBNull.Value, ... ein Datentyp integer...)
Fehlermeldung des Debuggers:
Ein gemeinsamer Typ kann nicht abgeleitet werden, und Option Strict On lässt die Annahme des Object-Typs nicht zu.
Gibt es da eine Möglichkeit (ich möchte ungern den Wert 0 im SQL-Server speichern, sondern NULL verwenden) ?

Danke und Grüße von PCFJKG

Content-Key: 1385439164

Url: https://administrator.de/contentid/1385439164

Printed on: April 23, 2024 at 07:04 o'clock

Mitglied: 143611
143611 Oct 13, 2021 at 15:59:02 (UTC)
Goto Top
Sicher dass das der (verstümmelte) Inhalt vom SqlCommand.CommandText ist? Dort sollten nur SQL-Statements stehen...

Falls Du einen SqlParameter für den Wert verwendest: dort kannst Du als Wert NULL übergeben, um DbNull in das Feld zu schreiben (sofern das Feld nullable ist).
Member: PCFJKG
PCFJKG Oct 13, 2021 at 16:28:14 (UTC)
Goto Top
Hallo schleeke,
danke für die schnelle Antwort. Hier der Text etwas ausführlicher:
cmd.CommandText = "INSERT [...].[dbo].[...] ([ ], [ ], [ ]) VALUES (" & If(IsDBNull( ...Rows(0).Item("... ")), DBNull.Value, CInt(.Rows(0).Item(" ... "))) &" hier wird der String dann fortgesetzt.
Die Tabellenspalten hinter INSERT lassen NULL zu und sollen auch NULL haben, wenn ...Rows(0).Item("... ") dbnull ist.
Cmd ist der SqlCommand und soll mit cmd.ExecuteNonQuery() ausgeführt werden...
Member: manuel-r
manuel-r Oct 13, 2021 at 16:58:25 (UTC)
Goto Top
Hallo
Das scheint ja nur ein Teil dessen zu sein womit das SQL-Statement zusammengebaut wird. Meist hat man da einfach mal irgendwo eine Klammer oder ein Anführungszeichen vergessen.
Kannst du das SQL-Statement so wie es erzeugt wird einfach als String ausgeben? Dann sieht man den Fehler meistens ganz schnell.

Manuel
Member: SlainteMhath
SlainteMhath Oct 14, 2021 at 05:49:01 (UTC)
Goto Top
Moin,

du baust ja einen String zusammen. Du musst also, falls isDBNull(row(0).item) == True, den STRING "NULL" in den CommandText schreiben, und nicht (den Wert von) DBNull.Value

Oder du verwendest Prepared Statements -> https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcom ...

lg,
Slainte
Member: PCFJKG
PCFJKG Oct 14, 2021 at 12:53:11 (UTC)
Goto Top
Hallo manuel-r und SlainteMhath,
mit Prepared Statements funktioniert die Sache natürlich, man könnte auch Variable verwenden, welche je nach IF-Statement Null oder einen Wert besitzen (übriges wird "NULL" nicht funktionieren, weil "NULL" als String interpretiert wird und die zweite Variable einen integer-Wert darstellt, - damit auch kein gemeinsamer Typ). Ich wollte halt nur das (m.E. übersichtlich-einfache) IF-Statement mit 3 Argumenten benutzen. Nun sieht es wohl so aus, dass es so nichts wird. Wie auch immer, danke für Eure Mühe und eine schöne Zeit.
PCFJKG