程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中SQL參數傳入空值報錯解決方案

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

編輯:C#入門知識

C#中SQL參數傳入空值報錯解決方案。本站提示廣大學習愛好者:(C#中SQL參數傳入空值報錯解決方案)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中SQL參數傳入空值報錯解決方案正文


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

作者:邪心魔佛一頁書

這篇文章主要介紹了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) 的判斷不能少。

以上所述是小編給大家介紹的C#中SQL參數傳入空值報錯解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對網站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved