久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C#中往數(shù)據(jù)庫(kù)插入/更新時(shí)候關(guān)于NUll空值的處理

 _明心見(jiàn)性_ 2019-04-14

本文轉(zhuǎn)載:http://blog.csdn.net/chybaby/article/details/2338943

今天碰到個(gè)問(wèn)題,。。SqlCommand對(duì)傳送的參數(shù)中如果字段的值是NULL具然不進(jìn)行更新操作,,也不提示任何錯(cuò)誤,。。,。百思不得其解,。。,。先作個(gè)記錄,,再查資料看看什么原因。

暫時(shí)的解決方法:

1,、Update不支持更新Null,先Delete后Insert來(lái)替換.

2,、替代Null的方法,對(duì)于字符型,只要是Null,改為空,語(yǔ)句中就是''.

找到了相關(guān)的解決方法

ADO.Net的Command對(duì)象如何向數(shù)據(jù)庫(kù)插入NULL值(原創(chuàng))

一般來(lái)說(shuō),在Asp.Net與數(shù)據(jù)庫(kù)的交互中,,通常使用Command對(duì)象,,如:SqlCommand。通過(guò)Command對(duì)象對(duì)數(shù)據(jù)庫(kù)操作是相當(dāng)安全和方便的(相對(duì)于RecordSet方式),。但是,,同時(shí)發(fā)現(xiàn)了一個(gè)問(wèn)題,。像有些日期字段,如果用戶沒(méi)有選擇日期,,我們希望他保持NULL狀態(tài),。我寫(xiě)的關(guān)鍵代碼如下:

SqlCommand sqlCmd = new SqlCommand(sqlStatment, dbConn);

sqlCmd.Parameters.AddWithValue("@Name", name);

sqlCmd.Parameters.AddWithValue("@Surname", surname);這時(shí),雖未出錯(cuò),,但返回的影響行數(shù)告訴我,。更新未成功。這是怎么回事呢,?

原來(lái)ADO.Net為了防止一些不容易找出的錯(cuò)誤,,在Command操作時(shí)加了一些限制。我們必須明確指示Command對(duì)象,,我們需要插入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;不過(guò),還有一點(diǎn)要注意的就是,,這里的IsNullable,,不是說(shuō)你可以插入null值,而是指DBNull.Value值,。

希望這點(diǎn)小經(jīng)驗(yàn)會(huì)對(duì)大家有幫助,。

復(fù)制代碼

 方法一、 

public int UpdateFeedBackStatus(int _feedBackID, int _status, object _RequestDateTime)

        {

            SqlParameter[] param = {

                                       new SqlParameter("@FeedBackID", _feedBackID),

                                       new SqlParameter("@FeedBackStatusID", _status),

                                       new SqlParameter("@RequestDateTime", _RequestDateTime)

                                    };

            StringBuilder strSql = new StringBuilder();

            strSql.Append("UPDATE dbo.FeedBack ");

            strSql.Append("SET FeedBackStatusID=@FeedBackStatusID,RequestDateTime=@RequestDateTime ");

            strSql.Append("WHERE FeedBackID=@FeedBackID ");

            return DbHelper.ExecuteNonQuery(CommandType.Text,strSql.ToString(),param);

        }

調(diào)用:

 feedBackBLL.UpdateFeedBackStatus(_feedBackID, 4, DBNull.Value);

 或者feedBackBLL.UpdateFeedBackStatus(_feedBackID, 4,null);

復(fù)制代碼

復(fù)制代碼

方法二:

  public int UpdateFeedBackStatus(int _feedBackID, int _status, DateTime? _RequestDateTime)

        {

            SqlParameter[] param = {

                                       new SqlParameter("@FeedBackID", _feedBackID),

                                       new SqlParameter("@FeedBackStatusID", _status),

                                       new SqlParameter("@RequestDateTime", _RequestDateTime)

                                   };

            param[2].IsNullable = true;

            StringBuilder strSql = new StringBuilder();

            strSql.Append("UPDATE dbo.FeedBack ");

            strSql.Append("SET FeedBackStatusID=@FeedBackStatusID,RequestDateTime=@RequestDateTime ");

            strSql.Append("WHERE FeedBackID=@FeedBackID ");

            return DbHelper.ExecuteNonQuery(CommandType.Text,strSql.ToString(),param);

        }

調(diào)用:

 feedBackBLL.UpdateFeedBackStatus(_feedBackID, 4,null);

復(fù)制代碼

二,、C#中往數(shù)據(jù)庫(kù)插入空值的問(wèn)題

在用C#往數(shù)據(jù)庫(kù)里面插入記錄的時(shí)候, 可能有的字段你不賦值,那么這個(gè)字段的值就為null, 如果按一般想法的話,這個(gè)值會(huì)被數(shù)據(jù)庫(kù)接受, 然后在數(shù) 據(jù)表里面顯示為NUll, 實(shí)際上這就牽扯到一個(gè)類型的問(wèn)題, C#中的NUll于SQL中的null是不一樣的, SQL中的null用C#表示出來(lái)就 是DBNull.Value, 所以在進(jìn)行Insert的時(shí)候要注意的地方.

Example:

       SqlCommand cmd=new  SqlCommand("Insert into Student values(@StuName,@StuAge)" ,con);

       cmd.parameters.add("@StuName" ,stuname);

       cmd.parameters.add("@StuAge" ,stuage);

       cmd.ExecuteNonQuery();

這些代碼看似沒(méi)有問(wèn)題, 其實(shí)當(dāng)stuname于stuage中的任何一個(gè)值為null的時(shí)候, 這代碼就會(huì)報(bào)錯(cuò)...汗!!!

解決辦法:

        其實(shí)最簡(jiǎn)單的辦法就是進(jìn)行判斷, 當(dāng)stuname或stuage為空時(shí), 插入DBNull.Value.

        但是這樣當(dāng)一個(gè)數(shù)據(jù)庫(kù)有很多字段時(shí)或者是有很多張表時(shí), 代碼就會(huì)很多了,我也沒(méi)有找到特別方便的方法,我的方法是:寫(xiě)一個(gè)靜態(tài)的方法來(lái)對(duì)變量的值進(jìn)行判斷:

Example :     

        static  public  object  SqlNull(object  obj)

        {

            if  (obj == null )

                return  DBNull.Value;

            return  obj;

        }

       //用上面的方法對(duì)參數(shù)進(jìn)行了判斷 

       cmd.parameters.add("@StuName" ,SqlNull(stuname));

       cmd.parameters.add("@StuAge" ,SqlNull(stuage));

       cmd.ExecuteNonQuery();

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多