Maison > développement back-end > Tutoriel C#.Net > Erreur lors du passage d'une valeur nulle dans le paramètre SQL en C# et comment la résoudre

Erreur lors du passage d'une valeur nulle dans le paramètre SQL en C# et comment la résoudre

零下一度
Libérer: 2017-06-23 16:27:19
original
1996 Les gens l'ont consulté

Null en C# est différent de NULL en SQL. NULL en SQL est exprimé sous la forme DBNull.Value en C#.

Remarque : Les paramètres SQL ne peuvent pas accepter la valeur nulle de C# Si null est transmis, une erreur sera signalée.

Regardons un exemple ci-dessous :

1 SqlCommand cmd=new  SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);2 cmd.parameters.add("@StuName" ,stuName);3 cmd.parameters.add("@StuAge" ,stuAge);4 cmd.ExecuteNonQuery();
Copier après la connexion

Il n'y a aucun problème avec le code ci-dessus. En fait, lorsque la valeur de stuName ou stuAge est nulle, une exception sera levée. Alors comment le résoudre ?
Solution : Lorsque la valeur de stuName ou stuAge est nulle, transmettez DBNull.Value. Ensuite, écrivez une méthode générale statique dans la classe publique pour juger la valeur du paramètre transmise. Si elle est nulle, renvoyez DBNull.Value, sinon renvoyez la valeur d'origine.

 1 public static object SqlNull(object obj) 2 { 3   if(obj == null) 4   { 5     return DBNull.Value; 6   } 7   else 8   { 9     return obj;10   }    
11 }
Copier après la connexion

Le code après appel de la méthode ci-dessus est le suivant :

1 SqlCommand cmd=new  SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);2 cmd.parameters.add("@StuName" ,SqlNull(stuName));3 cmd.parameters.add("@StuAge" ,SqlNull(stuAge));4 cmd.ExecuteNonQuery();
Copier après la connexion

De plus, si la valeur du paramètre provient un contrôle (comme une zone de texte), la valeur du paramètre transmise ne sera pas nulle (car la valeur du contrôle ne sera pas nulle, même s'il n'y a pas de valeur, elle sera toujours "") Si vous le souhaitez. sachez que lorsque la valeur du contrôle est "" (par exemple aucun caractère saisi dans la zone de texte), la valeur du champ de la table de données est NULL, il vous suffit de modifier légèrement la méthode SqlNull :

 1 public static object SqlNull(object obj) 2 { 3    if(obj == null || obj.ToString() == "") 4    { 5      return DBNull.Value; 6    } 7    else 8    { 9      return obj;10    }    
11  }
Copier après la connexion

Extension :

Vous pouvez également transmettre des groupes de paramètres lors de la transmission de paramètres SQL, comme suit :

 1 SqlParameter[] parm = new SqlParameter[] 2 { 3   new SqlParameter("@StuName", SqlNull(stuName)), 4   new SqlParameter("@StuAge", SqlNull(stuAge))  
 5 } 6 if(parm != null) 7 { 8   cmd.Parameters.AddRange(parm);   
 9 }10 cmd.ExecuteNonQuery();
Copier après la connexion

Remarque : la valeur du paramètre dans. le nouveau SqlParameter (nom du paramètre, valeur du paramètre) n'accepte pas non plus les valeurs nulles, et le groupe de paramètres parm n'accepte pas non plus null , if(parm != null) ne peut être jugé sans .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal