本文**:
今天碰到個問題。。sqlcommand對傳送的引數中如果欄位的值是null具然不進行更新操作,也不提示任何錯誤。。。百思不得其解。。。先作個記錄,再查資料看看什麼原因。
暫時的解決方法:
1、update不支援更新null,先delete後insert來替換.
2、替代null的方法,對於字元型,只要是null,改為空,語句中就是''.
找到了相關的解決方法
ado.net的command物件如何向資料庫插入null值(原創)
一般來說,在asp.net與資料庫的互動中,通常使用command物件,如:sqlcommand。通過command物件對資料庫操作是相當安全和方便的(相對於recordset方式)。但是,同時發現了乙個問題。像有些日期字段,如果使用者沒有選擇日期,我們希望他保持null狀態。我寫的關鍵**如下:
sqlcommand sqlcmd = new sqlcommand(sqlstatment, dbconn);
sqlcmd.parameters.addwithvalue("@name", name);
sqlcmd.parameters.addwithvalue("@surname", surname);
這時,雖未出錯,但返回的影響行數告訴我。更新未成功。這是怎麼回事呢?
原來ado.net為了防止一些不容易找出的錯誤,在command操作時加了一些限制。我們必須明確指示command物件,我們需要插入null值。修改後的**如下:
sqlcommand sqlcmd = new sqlcommand(sqlstatment, dbconn);
sqlcmd.parameters.addwithvalue("@name", name);
sqlcmd.parameters.addwithvalue("@surname", surname);
sqlcmd.parameters[0].isnullable = true;
sqlcmd.parameters[1].isnullable = true;
不過,還有一點要注意的就是,這裡的isnullable,不是說你可以插入null值,而是指dbnull.value值。
希望這點小經驗會對大家有幫助。
方法一、
public
int updatefeedbackstatus(int _feedbackid, int _status, object _requestdatetime)
呼叫:feedbackbll.updatefeedbackstatus(_feedbackid, 4, dbnull.value);
或者feedbackbll.updatefeedbackstatus(_feedbackid, 4,null);
方法二:
public
int updatefeedbackstatus(int _feedbackid, int _status, datetime? _requestdatetime)
;param[
2].isnullable =
true
;update dbo.feedback
set feedbackstatusid=@feedbackstatusid,requestdatetime=@requestdatetime
where feedbackid=@feedbackid
");return dbhelper.executenonquery(commandtype.text,strsql.tostring(),param);
}呼叫:
feedbackbll.updatefeedbackstatus(_feedbackid, 4,null);
二、c#中往資料庫插入空值的問題
在用c#往資料庫裡面插入記錄的時候, 可能有的字段你不賦值,那麼這個欄位的值就為null, 如果按一般想法的話,這個值會被資料庫接受, 然後在數 據表裡面顯示為null, 實際上這就牽扯到乙個型別的問題, c#中的null於sql中的null是不一樣的, sql中的null用c#表示出來就 是dbnull.value, 所以在進行insert的時候要注意的地方.
example:
sqlcommand cmd=new sqlcommand("insert into student values(@stuname,@stuage)" ,con);
cmd.parameters.add("@stuname" ,stuname);
cmd.parameters.add("@stuage" ,stuage);
cmd.executenonquery();
這些**看似沒有問題, 其實當stuname於stuage中的任何乙個值為null的時候, 這**就會報錯...汗!!!
解決辦法:
其實最簡單的辦法就是進行判斷, 當stuname或stuage為空時, 插入dbnull.value.
但是這樣當乙個資料庫有很多欄位時或者是有很多張表時, **就會很多了,我也沒有找到特別方便的方法,我的方法是:寫乙個靜態的方法來對變數的值進行判斷:
example :
static public object sqlnull(object obj)
//用上面的方法對引數進行了判斷
cmd.parameters.add("@stuname" ,sqlnull(stuname));
cmd.parameters.add("@stuage" ,sqlnull(stuage));
cmd.executenonquery();
往資料庫中插入資料
private materialenterstore entitymes 入庫表 private materialenterdetail entitymed 入庫明細表 transactionmanager tran datarepository.provider.createtransaction...
C 中往資料庫插入空值的問題
在用c 往資料庫裡面插入記錄的時候,可能有的字段你不賦值,那麼這個欄位的值就為null,如果按一般想法的話,這個值會被資料庫接受,然後在數 據表裡面顯示為null,實際上這就牽扯到乙個型別的問題,c 中的null於sql中的null是不一樣的,sql中的null用c 表示出來就 是dbnull.va...
C 中往資料庫插入空值的問題
在用c 往資料庫裡面插入記錄的時候,可能有的字段你不賦值,那麼這個欄位的值就為null,如果按一般想法的話,這個值會被資料庫接受,然後在數 據表裡面顯示為null,實際上這就牽扯到乙個型別的問題,c 中的null於sql中的null是不一樣的,sql中的null用c 表示出來就 是dbnull.va...