对于数据库操作可能会遇到的问题(空值问题以及出现的参数不能被重复使用问题)
2016-04-14 16:12
537 查看
初学就碰到如此多的问题,希望有遇到相同问题的少年,可以参考思路解决方案(希望共同进步)
鉴于昨日遇到操作数据库问题比较多,上网百度,才知道原来GC没有及时清除,还会残留在内存中,造成对象指代不明,所以出现错误
解决办法
在SqlHelper中
对于数据库中字段定义为允许为空时,如果直接传递参数到执行对象中可能会出现如下错误
Additional information: The parameterized query '(@name nvarchar(50),@phone varchar(50),@email varchar(50),@group' expects the parameter '@email', which was not supplied.
出现上述的问题是因为你传递的email字段为空值,而数据库中时不支持将某个字段赋值为空的,即 email=Null;
所以解决办法
就需要你传递参数时加入
进行空值判断,当传入的是空值时,就将DBNull.value值,空值传进数据库中
鉴于昨日遇到操作数据库问题比较多,上网百度,才知道原来GC没有及时清除,还会残留在内存中,造成对象指代不明,所以出现错误
解决办法
在SqlHelper中
public static int ExecuteNonQuery(string sql, CommandType cmdType, params SqlParameter[] spm) { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql,conn)) { cmd.CommandType = cmdType; cmd.Parameters.Clear();//增加该语句清除参数干扰 cmd.Parameters.AddRange(spm); conn.Open(); return cmd.ExecuteNonQuery(); } } }
对于数据库中字段定义为允许为空时,如果直接传递参数到执行对象中可能会出现如下错误
Additional information: The parameterized query '(@name nvarchar(50),@phone varchar(50),@email varchar(50),@group' expects the parameter '@email', which was not supplied.
出现上述的问题是因为你传递的email字段为空值,而数据库中时不支持将某个字段赋值为空的,即 email=Null;
所以解决办法
就需要你传递参数时加入
SqlParameter spm=new SqlParameter("@email",SqlDbType.VarChar,50){Value=model.Email==null?DBNull.Value:(object)model.Email}
进行空值判断,当传入的是空值时,就将DBNull.value值,空值传进数据库中
相关文章推荐
- PL SQL 修改 日期 显示格式
- mysql 5.7.7+支持JSON字段格式
- MYSQL——性能瓶颈定位
- solr集成mysql
- JSP中的PreparedStatement对象操作数据库的使用教程
- 数据库创建用户SQL
- MYSQL事务——四个隔离级别
- SQL的删除语句delete(删除表中的数据)
- SQL Server 查出未提交事务(长事务)SQL
- mysql优化SQL语句消耗
- MySql中创建存储过程
- mysql 模糊查询和正则
- Win7 64位下PowerDesigner连接64位Oracle11g数据库
- MySQL入门很简单: 3 操作数据库
- 基于nginx tomcat redis分布式web应用的session共享配置
- springMVC整合memcached
- mysql 导入导出csv
- MySQL5.7.11免安装版的安装和配置:解决MYSQL 服务无法启动问题
- SQL Server简洁查询正在运行的进程SQL
- sql之left join、right join、inner join的区别