C# C# SqlParameter Problem

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.103
Eine der Tabellen meiner DB beinhaltet die Spalte die den Wert NULL annehmen kann. Wie kann ich das über die SqlParameter durchsetzen?

Code:
public static void Parameter(ref SqlCommand cmd, String param, Object value, DbType t, Boolean nullable)
{
    try
    {
        SqlParameter p = new SqlParameter(param, value);
        p.DbType = t;
        p.IsNullable = nullable;
        cmd.Parameters.Add(p);
    }
    catch (ArgumentNullException ane)
    {
        ErrorLog.WriteError(ane);
    }
    catch (InvalidCastException ica)
    {
        ErrorLog.WriteError(ica);
    }
}
Also wenn ich jetzt den value = "NULL" (String) habe, kommt bei mir im sqlexecutenonquery fehler raus.

Konvertierung des Parameterwertes von String in Int32 fehlgeschlagen.
Ich habe schon rumprobiert dass der Value = null oder "NULL" oder "" gesetzt wird. Bekomme aber trotzdem den SQL Befehl nicht richtig ausgeführt. Wie kann ich Query anschauen nachdem die parameter eingesetzt worden sind? Vielleicht kann ich da besser sehen oder die parameterzeichen.
 
Code:
Parameter(sMyCommand, sMyParameter, System.DBNull.Value, Varchar, true);

oder so ähnlich sollte funktionieren...
 
Ich kann doch keinen textbox DBNull.Value zuweisen, oder? Bei mir ist es so, dass die ermittelte ID in einen zwischenspeicher landet. gibt es kein ergibniss so wird NULL geschrieben. Ich dachte das man mit Dbvalue das problem mit der NULL werten lösen kann wenn man den parameter vorgibt dass es null sein darf. so ist es aber bei mir zumindest nicht!
 
roker002 schrieb:
...gibt es kein ergibniss so wird NULL geschrieben.
Keine Ahnung, was du mit "textbox", "Dbvalue" und Zwischenspeicher meinst - da fehlt etwas Kontext.
Aber falls es immernoch darum geht, dass du ein NULL (SQL) ins Statement einbauen möchtest, kannst du doch "value" (vom Typ Object) auf NULL (C#) prüfen. Falls wahr ersetzt du es durch DBNull.Value. Dann kannst du deine Parameter()-Methode wie gewohnt verwenden und auch NULL (C#) zuweisen - intern erfolgt dann die Übersetzung zu DBNull.Value. Meinst du das?
 
Es ist wahr das du einer Textbox.Text Eigenschaft nicht den Wert DBNull.Value zuweisen kannst, aber dann ist auch die Frage, ob du das machen musst. So wie ich das sehe, baust du dir ein SqlStatement eh selbst zusammen und genau an der Stelle, wo du den Inhalt der TextBox übergeben willst, kannst du vorher prüfen ob Text = string.Empty. In diesem Fall würde ich dann DBNull.Value an das Statement bzw. den Parameter übergeben. Umgekehrt beim Selektieren der Werte aus der Datenbank in die TextBoxen würde ich statt direkt die Werte zu zuweisen, eher den Weg über die DataBindings nehmen. Diese sind genau für diesen Zweck gedacht und sorgen für die Konvertierungen von NULL Werten in string.Empty (wie es die TextBox benötigt) oder was du sonst als Wert haben möchtest.
 
mit databinding kenne ich mich garnicht aus! hmm... es ist aber für den fall wenn man aus der DB die werte hollt und nicht wenn man irgendwelche schreiben will, so verstehe ich, oder?
 
Sowohl als auch, d.h. mit den Binding Objekten kannst du eine beliebige Eigenschaft an ein Resultset, z.B. ein DataTable binden. Wenn jetzt der Wechsel zwischen den Datensätzen erfolgt, dann werden die Eigenschaften auf die Werte der darunterliegenden DataTable aktualisiert. Wenn du in der Form den Wert einer Eigenschaft (meistens ist es "Text") änderst, dann wird die Zeile im DataTable aktualisiert. Die Zeilen des DataTable werden im weiteren Programmverlauf verwendet um das Update, Insert oder Delete Kommando zu erstellen, welches gegen die Datenbank ausgeführt wird. Klingt am Anfang ganz schön kompliziert, ist aber in der Anwendung recht nett. Das bezieht sich jetzt auf .Net Framework 2.0, die späteren Varianten (3.x) ünterstützen dies auch, jedoch wurde mit 3.0 auch LINQ eingeführt, was sicher mehr Komfort für MS Produkte wie SQLServer bietet.
 
Zurück
Oben