Ich habe Probleme mit der richtigen Syntax, um entweder eine Zeichenfolge oder eine NULL an die Datenbank zu übergeben. Hier ist mein Code:
%Vor%Ich habe einfache Anführungszeichen um die variablen Platzhalter verwendet, damit die Datenbank einen Zeichenfolgenwert richtig akzeptiert. Wenn jedoch NULL übergeben wird, wird es als Zeichenfolge "NULL" in die Datenbank aufgenommen.
Gibt es eine Möglichkeit, die einfachen Anführungszeichen aus der InsertCommand-Zeichenfolge herauszulassen und meine Variablen bedingt mit einfachen Anführungszeichen zu versehen?
Verketten Sie die Zeichenkette nicht ( string.Format
) - verwenden Sie Parameter ( @p1
etc) - dann können Sie DBNull.Value
an NULL zu SQL Server
Dies schützt Sie auch vor SQL-Injection
Das Konzentrieren der Zeichenfolge mit String.Format ist möglicherweise ein großes Sicherheitsrisiko (SQL Injection) und problematisch, wenn Sie das Zeichen einfügen möchten.
Lösung:
%Vor%Im Geiste der Beantwortung der Frage, wie sie gestellt wurde, und der Tatsache, dass das Refactoring des Codes zur Parameterisierung der Abfragen die richtige Lösung ist, könnten Sie eine Funktion schreiben, die entweder eine Zeichenfolge in einfacher Anführungszeichen oder eine nicht-zitierte Zeichenfolge zurückgibt NULL String-Wert, dann entfernen Sie die einfachen Anführungszeichen aus der Abfragezeichenfolge.
%Vor%Wenn Sie VS 2008 verwenden, können Sie es sogar als eine Erweiterungsmethode implementieren.
%Vor%Ich werde die ToStringorNull-Funktion für Sie erstellen - es ist nicht schwer: -)
Tags und Links sql sql-server c#