C#中往数据库插入/更新时候关于NUll空值的处理
本文转载:http://blog.csdn.net/chybaby/article/details/2338943
本文转载:http://www.cnblogs.com/zfanlong1314/archive/2013/08/07/3243533.html
今天碰到个问题。。SqlCommand对传送的参数中如果字段的值是NULL具然不进行更新操作,也不提示任何错误。。。百思不得其解。。。先作个记录,再查资料看看什么原因。
暂时的解决方法:
1、Update不支持更新Null,先Delete后Insert来替换.
2、替代Null的方法,对于字符型,只要是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();
C#中往数据库插入/更新时候关于NUll空值的处理的更多相关文章
- C#:往数据库插入/更新时候关于NUll空值的处理
前几天遇到一个问题,找了好久才找到解决办法.不过也很开心,终于解决了. 问题:前端当我数据为空的时候不赋值,传到后台也为空的时候(注意:是Null不是""),SqlCommand对 ...
- 在function module 中向数据库插入数据
http://www.sapjx.com/abap-function-module.html 1: 应该在function module 中向数据库插入数据
- Android中当数据库需要更新时我们该怎么办?
问题:Android数据库更新并保留原来的数据如何实现 Andoird的SQLiteOpenHelper类中有一个onUpgrade方法.帮助文档中只是说当数据库升级时该方法被触发.经过实践,解决了我 ...
- C#中往数据库插入空值报错解决方法
C#中的NUll于SQL中的null是不一样的, SQL中的null用C#表示出来就是DBNull.Value 在用C#往数据库里面插入记录的时候, 可能有的字段你不赋值,那么这个字段的值就为null ...
- DButils工具类能够用来获取数据库连接向数据库插入更新删除对象2
package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import ja ...
- 41、Android中当数据库需要更新时我们该怎么办?
转载 http://blog.csdn.net/jiangwei0910410003/article/details/39670813
- SQL语句的使用,SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据
SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法. 但是 SQL 语言也包含用于更新. ...
- Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新
需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...
- sqlserver 插入 更新 删除 语句中的 output子句
官方文档镇楼: https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/ms177564(v=sql.100) 从 ...
随机推荐
- C# 个人常用代码积累
/// <summary> /// TextBox限制只能输入十六进制,且只能输入6个 /// </summary> /// <param name="send ...
- HL AsySocket 服务开发框架 - 一般性测试1
一 概述 Socket服务器性能要好就要经过无数次的测试,来保证,以下是记录一次的测试经过. 机器配置:Inter(R) Core(TM) i3-2310m CPU 2.10GHz RAM 6.00G ...
- denyhost防止SSH暴力破解
参考: http://blog.sina.com.cn/s/blog_593af2a70102vjnf.html denyhost 官网: http://denyhosts.sourceforge.n ...
- json date convert
function getDateTime(jsondate) { var date = new Date(parseInt(jsondate.replace("/Date(", & ...
- Mac系统下,在android studio中使用Github版本管理
1.下载并安装github客户端http://git-scm.com/download/ 2.打开android studio,测试github是否使用ok 点击"test",如果 ...
- 如何安装最新版本的memcached
转载自孟叔的博客: https://learndevops.cn/index.php/2016/06/10/how-to-install-the-latest-version-of-memcache ...
- sencha cmd 更新日志
http://cdn.sencha.com/cmd/6.2.1.29/release-notes.html
- Sass for循环中编译%时报错解决方案
sass功能强大,特别是支持for循环,节省大量开发时间,但是在开发时遇到一个问题,直接使用%时没有问题,当有变量时再加% 单位在编译时报错: 这样没有问题: @for $width from 0 t ...
- MVC自定义视图规则
自定义规则: using System.Web.Mvc; using System.Configuration; namespace Research { public class ViewConfi ...
- EFW框架源代码版本升级记录说明
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...