2009-02-27 5 views
0

Je viens de lire la réponse absolue à ce poste:
Problem inserting string or NULL into SQL Server databaseproblème insérer chaîne ou NULL dans la base de données SQL Server

-moi si je me trompe, mais peut le ?? - opérateur non seulement être utilisé sur deux des variables du même type, sinon je l'apprécierais grandement, si quelqu'un pouvait résoudre mon problème mineur.

J'ai essayé d'insérer du code dans mon projet similaire à celui ci-dessous.

Dictionary<string, string> strings = new Dictionary<string, string>() 
{ 
    {"@param0", strParam0}, 
    {"@param1", strParam1}, 
    {"@param2", strParam2} 
}; 
foreach (string param in strings.Keys) 
{ 
    cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value); 
} 

Mais Visual Studio se plaint avec le message suivant:
« Opérateur '??' ne peut pas être appliqué à des opérandes de type 'string' et 'System.DBNull' "

Répondre

0

DBNull et Null ne sont pas du même type, ni des types NULL ou des types de référence et DBNull. Vous ne pouvez utiliser que ?? avec des valeurs du même type.

On peut penser au ?? opérateur sucre syntaxique pour:

(left != null) ? left : right 

Et l'opération ternaire exige à la fois gauche et droit d'être du même type, donc par conséquent à gauche et à droite de la ?? l'opérateur doit également être du même type.

Donc, malheureusement, non .. vous ne pouvez pas le faire de cette façon, du moins pas sans coulée laide.

4

Essayez:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value); 
0
cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]); 

défaut est seulement qu'il fera le dictionnaire regarder deux fois!

+0

Il y a un autre défaut - il ne sera pas compilé! Vous ne pouvez pas convertir directement de la chaîne en DBNull, que vous utilisiez ou non? ou?: pour cela. – LukeH

+0

* l'essaie * Vous avez raison ... Il faut le tour ci-dessus (objet) DBNull.Value –

Questions connexes