[C#.net]SQL參數傳入空值報錯解決方案
阿新 • • 發佈:2019-03-29
into else dbnull 沒有 通用 urn 輸入 query param
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) 的判斷不能少。
[C#.net]SQL參數傳入空值報錯解決方案