C 中往資料庫插入 更新時候關於NUll空值的處理

2022-01-12 10:37:04 字數 2766 閱讀 6898

本文**:

今天碰到個問題。。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...