SqlParameter.Value = NULL 引发的数据库异常

摘自:http://www.cnblogs.com/ccweb/p/3403492.html

     using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = new SqlConnection(@"Data Source=PC201305032338\SQLEXPRESS;Initial Catalog=DBTest;Integrated Security=True"); ;
            cmd.Connection.Open();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "CheckDBNull";
            SqlParameter p1 = new SqlParameter();
            p1.ParameterName = "@p1";
            p1.DbType = DbType.String;
            p1.Value = null;
            cmd.Parameters.Add(p1);

            string rslt = cmd.ExecuteScalar().ToString();
        }

运行以上代码,将抛出“过程或函数 ‘CheckDBNull‘ 需要参数 ‘@p1‘,但未提供该参数。”的异常,问题就出在 p1.Value = null 这句话,这个null可能是某个对象的属性,但只要为null都是会抛出以上异常的。

[原因]

.Net框架规定:IDataParameter在向服务器发送 null 参数值时,用户必须指定 DBNull,而不是 null。系统中的 null 值是一个没有值的空对象。DBNull 用于表示 null 值。

[解决]

在给SqlParameter赋值时,如果参数值为null,将参数赋值为DBNull.Value,如:p1.Value = DBNull.Value

[参考]

IDataParameter接口,SqlParameter类实现该接口:public sealed class SqlParameter : DbParameter, IDbDataParameter, IDataParameter, ICloneable

DBNull和Null的区别,Null是.net中无效的对象引用;DBNull是一个类,DBNull.Value是它唯一的实例,它指数据库中数据为空(<NULL>)时,在.net中的值。

时间: 2024-07-30 03:05:49

SqlParameter.Value = NULL 引发的数据库异常的相关文章

监控SQL Server数据库异常镜像状态发告警邮件

监控SQL Server数据库异常镜像状态发告警邮件 在部署了数据库镜像之后,我们需要监控参与镜像的主数据库和镜像数据库的状态,如果状态异常,发送告警邮件.那么这个脚本需要在主和镜像服务器上都运行. 目录视图sys.database_mirroring对SQL Server实例上的每个数据库都包含一行(包括系统数据库和未配置镜像的数据库),当然也包含所有镜像数据库的状态信息.我们可以查询该目录视图,对于每个异常状态的镜像数据库触发告警邮件.笔者的环境配置的是异步镜像,依赖于手动故障转移. 前提条

--关于null在oracle数据库中是否参与计算,进行验证,

--关于null在oracle数据库中是否参与计算,进行验证,with td as (select null id,1 name from dual ),td1 as ( select null id,2 name from dual ) select * from td, td1 where nvl(td.id,'0.00') = '0' select '1'||'0.1' from dual number number -> char select to_char(3333.00,'999,

VCS引起的oracle数据库异常重启一例

1. 环境描述 操作系统版本:SUSE Linux Enterprise Server 10 sp2 (x86_64) 数据库版本:Oracle 11.1.0.7.16 VCS版本:5.1 blog地址:http://blog.csdn.net/hw_libo/article/details/41171561 2. 问题现象及分析 凌晨3:46左右,手机短信收到数据库异常告警. (1)查看数据库alert日志 Sun Nov 16 03:46:51 2014 Stopping backgroun

oracle所在磁盘空间不足导致了数据库异常

oracle所在磁盘空间不足导致了数据库异常.需要减小数据文件的大小来解决. 1.检查数据文件的名称和编号 select file#,name from v$datafile; 2.看哪个数据文件所占的空间最大,根据该数据文件的编号查看该数据文件的最大数据块数 select max(block_id) from dba_extents where file_id=8; 查询结果 3.计算该表空间的实际占用空间.(不是物理文件的大小) 查看每个数据块的大小 show parameter db_bl

数据库异常sysservers中找不到服务器 源码下载

本文引用于:征途源码论坛(www.zhengtuwl.com)-----专注各类免费精品源码下载的平台 数据库异常:[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问. 网狐架设很多人第一架设肯定要遇到这个问题,网上找教程,也没有提到这个的,这里我来写解决方法,免得再有人问我了!本站是不提供技术服务的,在QQ上问我问题我是直接忽略的,有问题发布到论坛,只要是我知道的我就一定帮助解决,不要再QQ上问我了!开始->所有程序->Mic

JDBC 数据库异常 Exception 关闭的(语句,连接,ResultSet)

如果在rs.next()之前关闭了Statement或PreparedStatement,会导致下面的异常: java.sql.SQLException: 关闭的语句: next 如果在rs.next()之前关闭了Connection,会导致下面的异常: java.sql.SQLException: 关闭的连接: next问题 如果在rs.next()之前关闭了ResultSet,会导致下面的异常: java.sql.SQLException: 关闭的 Resultset: next JDBC

网站登录界面包数据库异常

在系统的登录界面包数据库异常的解决方法: 1.可能是oracle客户端和服务器端版本限制要求(重新安装oracle32位客户端). 2.数据库中的数据被修改(重新导入该系统的数据).

java--何时处理Exception(哪一个层级),基包装的础类处理任务尽可能简洁,写入日志,检查null等运行时异常

1. 运行时异常和受检异常 2. 提前预防运行时异常.最常发生的是NPE,而检查NPE是程序员的基本职责.其他的,如除0等运行时异常的检查,需要程序员仔细检查,每个函数都得检查(除非可以确定不会有空指针等情况),哪怕if()语句数量增加.无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过catch NumberFormatException来实现. null:1)如果是外部获取,则有必要检查null:2)如果是内部的或者逻辑上保证正确的,可以不查null. 3. 处理受检异常

C# 连接Oracle数据库异常总结

这2天因为工作需要连接Oracle数据库,中间发生了很多问题 一.使用OleDbConnection连接数据库 ------------------ Provider=OraOLEDB.Oracle.1;User ID=sajet;Password=tech;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.66.225)(PORT = 1521))) (CONNECT_DAT