ホームページ > バックエンド開発 > C#.Net チュートリアル > C#でSQLパラメータにnull値を渡すときのエラーとその解決方法

C#でSQLパラメータにnull値を渡すときのエラーとその解決方法

零下一度
リリース: 2017-06-23 16:27:19
オリジナル
2000 人が閲覧しました

C# の Null は SQL の NULL とは異なります。SQL の NULL は C# では DBNull.Value として表されます。

注: SQL パラメーターは C# の null 値を受け入れることができません。null が渡されると、エラーが報告されます

以下の例を見てみましょう:

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();
ログイン後にコピー

上記のコードには問題がないように見えますが、実際には、stuName または stuAge の値が null の場合、例外がスローされます。では、どうすれば解決できるでしょうか?
解決策: stuName または stuAge の値が null の場合は、DBNull.Value を渡します。次に、渡されたパラメータ値を判定するための静的汎用メソッドを作成し、null の場合は DBNull.Value を返し、それ以外の場合は元の値を返します。

 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 }
ログイン後にコピー

上記のメソッドを呼び出した後のコードは次のとおりです:

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();
ログイン後にコピー

さらに、パラメータ値がコントロール (テキスト ボックスなど) の値から取得される場合、渡されるパラメータ値はnullであること(コントロールの値がnullにならないため、値がなくても「」になります) コントロールの値が「」の場合(文字が入力されていない場合など)。テキスト ボックス内))、データ テーブルのフィールド値が NULL の場合、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  }
ログイン後にコピー

拡張:

SQL パラメータを渡すときに、次のようにパラメータ グループを渡すこともできます:

 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();
ログイン後にコピー

注: new SqlParameter のパラメータ値 (パラメータ名、パラメータ値) も null 値を受け入れません。また、parm パラメータ グループも、if(parm != null の判断) である null を受け入れません。 ) をそれ以下にすることはできません

以上がC#でSQLパラメータにnull値を渡すときのエラーとその解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート