Problème de l'insertion de chaîne ou NULL dans la base de données SQL Server
Je vais avoir du mal à trouver la bonne syntaxe pour permettre à une chaîne ou une valeur NULL pour être transmis à la base de données. Voici mon code:
string insertString = String.Format(
@"INSERT INTO upload_history (field1, field2, field3)
VALUES ('{0}', '{1}', '{2}')",
varField1, varField2, varField3);
J'ai utilisé des guillemets simples autour de la variable espaces réservés de sorte que la base de données correctement accepter une valeur de chaîne. Toutefois, si une valeur NULL est passé, il finit par aller dans la base de données de la chaîne de la valeur "NULL".
Est-il une manière que je peux laisser les guillemets simples de la InsertCommand chaîne, et à condition d'ajouter des guillemets simples pour mes variables?
OriginalL'auteur beardog | 2008-12-17
Vous devez vous connecter pour publier un commentaire.
Ne pas concaténer la chaîne (
string.Format
) - utiliser des paramètres (@p1
etc) - ensuite, vous pouvez passerDBNull.Value
à la moyenne de la valeur null SQL ServerCela vous protège également contre l'injection SQL
ajouter un
(object)
en face de l'un d'eux.Sweet! Qui aide vraiment! Merci!
OriginalL'auteur Marc Gravell
Concentating la chaîne avec la Chaîne.Format peut être un gros risque de sécurité (Injection SQL), et aussi problématique si vous souhaitez insérer le caractère'.
Solution:
OriginalL'auteur Stefan Schultze
Dans l'esprit de répondre à la question, il a été demandé, et en étant pleinement conscient que le refactoring du code de paramaterizing requêtes est la bonne solution, vous pouvez écrire une fonction qui renvoie une simple chaîne de caractères entre guillemets ou non cotées en valeur de chaîne NULLE, puis retirer les guillemets simples dans la chaîne de requête.
Si vous utilisez VS 2008 vous pouvez même la mettre en œuvre comme une extension de la méthode.
Je vais laisser de la création de la ToStringorNull de la fonction pour vous - il n'est pas difficile 🙂
OriginalL'auteur rjrapson