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

零下一度
零下一度original
2017-06-23 16:27:192038parcourir

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();

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 }

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();

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  }

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();

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!

Déclaration:
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