【C#】中SQL參數傳入空值報錯解決方案

C#中的null與SQL中的NULL是不一樣的,SQL中的NULL用C#表示出來就是DBNull.Value。

注意:SQL參數是不能接受C#的null值的,傳入null就會報錯。

例如:

SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);
cmd.parameters.add("@StuName" ,stuName);
cmd.parameters.add("@StuAge" ,stuAge);
cmd.ExecuteNonQuery();

上述代碼當stuName或stuAge的值爲null時,就會拋出異常。那怎麼解決呢?

 

解決方案:當stuName或stuAge的值爲null時,傳入DBNull.Value。下面在公共類裏寫一個靜態的通用方法對傳入的參數值進行判斷,爲null則返回DBNull.Value,否則返回原值。

public static object SqlNull(object obj)
 {
  if(obj == null)
  {
   return DBNull.Value;
  }
  else
  {
   return obj;
  }  
 }


調用上述方法後的代碼如下:

SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);
cmd.parameters.add("@StuName" ,SqlNull(stuName));
cmd.parameters.add("@StuAge" ,SqlNull(stuAge));
cmd.ExecuteNonQuery();

另外,如果參數值來源於控件(如文本框)的值,則傳入的參數值不會爲null(因爲控件的值不會爲null,即便沒值也是""),如果想實現當控件的值爲""(如文本框中沒有輸入字符)時,數據表字段值爲NULL,只需對SqlNull方法稍作修改:

public static object SqlNull(object obj)
{
  if(obj == null || obj.ToString() == "")
  {
   return DBNull.Value;
  }
  else
  {
   return obj;
 }  
}

延伸:

傳SQL參數還可以傳參數組,如下:

SqlParameter[] parm = new SqlParameter[]
{
 new SqlParameter("@StuName", SqlNull(stuName)),
 new SqlParameter("@StuAge", SqlNull(stuAge)) 
}
if(parm != null)
{
 cmd.Parameters.AddRange(parm);  
}
cmd.ExecuteNonQuery();

注意:new SqlParameter(參數名, 參數值)裏的參數值同樣不接受null值,且parm參數組也不接受null, if(parm != null) 的判斷不能少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章