本文转载:http://blog.csdn.net/chybaby/article/details/2338943

今天碰到个问题。。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)
        {
            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);
        }

调用:
 feedBackBLL.UpdateFeedBackStatus(_feedBackID, 4, DBNull.Value);

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

方法二:
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);
        }

调用:
 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)
        {
            if  (obj == null )
                return  DBNull.Value;

return  obj;
        }

//用上面的方法对参数进行了判断 
       cmd.parameters.add("@StuName" ,SqlNull(stuname));
       cmd.parameters.add("@StuAge" ,SqlNull(stuage));
       cmd.ExecuteNonQuery();

转载于:https://www.cnblogs.com/51net/p/3243533.html

C#中往数据库插入/更新时候关于NUll空值的处理相关推荐

  1. idea中往数据库插入中文时出现问号,修改中文时无法修改,或查询中文时查询不出来

    问题:idea中往数据库插入中文时出现问号,修改中文时无法修改,或查询中文时查询不出来 解决办法: 1.找到资源目录下的链接数据库的配置文件 2.在url的value值后面加上: useUnicode ...

  2. sql 插入text字段包含特殊字符_Kettle(PDI)转换中输出之插入/更新详解

    概述 Insert / update(插入 / 更新)此步骤首先使用一个或多个查询关键字查找表中的一行.如果找不到该行,则插入该行.如果可以找到它,并且要更新的字段相同,则不执行任何操作.如果它们不完 ...

  3. node.js中mysql批量插入更新的三种方法

    [背景]在项目中遇到一个批量插入数据的需求,由于之前写过的sql语句都是插入一个对象一条数据,于是去网上搜关键词 "sql批量插入"."mysql批量插入"等, ...

  4. 2020-11-22 如何在C#中往数据库插入数据

    获取连接字符串 连接字符串 数据类型 变量 = 连接字符串 string connStr = "Data Source=.;Initial Catalog=dbtwo;Integrated ...

  5. mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解

    一.Insert操作 Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键.文档结构采用类似JSON的BSON格式. ...

  6. mysql数据库插入datetime_往MySQL数据库datetime类型字段中插入数据库的当前时间

    代码: StringBuilder sb = new StringBuilder(); sb.append(" insert into uosdetailfile ("); sb. ...

  7. 是否可以在SQLite数据库中一次插入多行?

    在MySQL中,您可以插入多行,如下所示: INSERT INTO 'tablename' ('column1', 'column2') VALUES('data1', 'data2'),('data ...

  8. Mysql生产环境表更新方案_生产环境中,数据库升级维护的最佳解决方案flyway

    官网:https://flywaydb.org/ 转载:http://casheen.iteye.com/blog/1749916 1.  引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的 ...

  9. 向mysql表中插入/更新数据时自动添加创建时间/更新时间

    目录 处理方式一:修改数据库字段类型 测试插入数据: 测试更新数据: 处理方式二:配置生成策略 [MySQL版本] 8.x 处理方式一:修改数据库字段类型 自动添加创建时间: 将字段类型设置为TIME ...

最新文章

  1. 树莓派被曝开春上市,估值高于5亿美元,收入主要来源于生产版权费
  2. 雷鸣----总结下男人30岁之前要知道的事
  3. HTML转义字符大全 (换行,enter,所有特殊字符)
  4. Vue2 模板template的四种写法总结
  5. mit许可证_MIT许可证的神秘历史
  6. Linux 远程和本地的一些解决方案
  7. 【荐】纯CSS实现苹果MAC官方网站的菜单导航
  8. windows之bat之批处理复制文件
  9. HTML实现获取验证码功能
  10. mysql 计算天数_mysql计算两个日期之间的天数
  11. Flutter笔记(9)flutter中baseline基准线布局
  12. java switch语句怎么写,java怎么用switch语句
  13. 控件库中的Botton控件简述
  14. 基于JavaWeb+MySQL的简历信息管理系统
  15. 网易WEB白帽子 -WEB安全工具
  16. java hotspot 默认垃圾回收器_怎么查看服务器默认的垃圾的收集器是哪个?生产环境上如何配置垃圾回收收集器?谈谈你对垃圾收集器的理解?...
  17. P2P平台尝试大数据征信初见成效
  18. 2021成都好久查询高考成绩,2021年成都各高中高考成绩排名及放榜最新消息
  19. Chrome 113 发布,默认启用 WebGPU
  20. 关于Java通过throw主动抛出异常

热门文章

  1. 阿里当初50亿美元收购UC,现在看来是不是亏大了?
  2. 看奥运之二:现场看男子体操团体决赛
  3. 爱是谋杀:读徐小斌的《别人》
  4. 浅谈GSM/GPRS模块软硬件设计(基于有方M660+模块和单片机)
  5. 线性序列机与串口接口DAC驱动设计与验证
  6. Scroll Dialog
  7. Linux--根文件系统的挂载过程分析
  8. 智能机器人建房子后房价走势_明后年日照房价走势如何?究竟是“上涨”还是下降...
  9. 小米网关控制空调伴侣_小爱同学怎么控制灯?
  10. 充电原理_电动汽车充电桩如何设置?充电桩原理介绍