首頁 > 後端開發 > C#.Net教程 > C#中SQL參數傳入空值出錯誤和如何解決方法

C#中SQL參數傳入空值出錯誤和如何解決方法

零下一度
發布: 2017-06-23 16:27:19
原創
1998 人瀏覽過

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參數群組也不接受null, if(parm != null) 的判斷不能少

以上是C#中SQL參數傳入空值出錯誤和如何解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板