SqlParameter的默认值设置为0,不能按预期工作 [英] SqlParameter with default value set to 0 doesn't work as expected

查看:493
本文介绍了SqlParameter的默认值设置为0,不能按预期工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在做这样的事情:

 的SqlParameter参数=新的SqlParameter(@参数,0){SqlDbType = SqlDbType.Int}; 

私人无效TestParam(参数的SqlParameter){
字符串测试= param.Value.ToString(); //在这里获得的NullReferenceException
}



不过,我停止获取例外,当我把它像这样的:

 的SqlParameter参数=新的SqlParameter(@参数,SqlDbType.Int){值= 0}; 

私人无效TestParam(参数的SqlParameter){
字符串测试= param.Value.ToString(); //一切OK
}



谁能告诉我,为什么SqlParameter的假定0是一样的空



编辑: MSDN介绍该在这里:的 SqlParameter的构造


解决方案

当您使用的SqlParameter构造函数
的这种超负荷
指定整数参数值,一定要小心。
,因为这个重载采用
Object类型的值,必须将
积分值转换为对象类型时,
值为零,因为下面的C#
。例子演示

 参数=新的SqlParameter(@ PNAME,Convert.ToInt32(0)); 

如果您不执行此转换,
编译器假定你是
试图调用的SqlParameter
(字符串,SqlDbType)构造
超载。




感谢的Msdn :)


I was doing something like this:

SqlParameter param = new SqlParameter("@Param", 0) { SqlDbType = SqlDbType.Int };

private void TestParam(SqlParameter param) {
   string test = param.Value.ToString();  // Getting NullReferenceException here
}

But I stop getting the exception when I put it like this:

SqlParameter param = new SqlParameter("@Param", SqlDbType.Int)  { Value = 0 };

private void TestParam(SqlParameter param) {
    string test = param.Value.ToString();  // Everything OK
}

Can anyone tell me why SqlParameter assumes 0 is the same as null?

Edit: MSDN Explains this here: SqlParameter Constructor

解决方案

Use caution when you use this overload of the SqlParameter constructor to specify integer parameter values. Because this overload takes a value of type Object, you must convert the integral value to an Object type when the value is zero, as the following C# example demonstrates.

Parameter = new SqlParameter("@pname", Convert.ToInt32(0));

If you do not perform this conversion, the compiler assumes that you are trying to call the SqlParameter (string, SqlDbType) constructor overload.

Thanks Msdn :)

这篇关于SqlParameter的默认值设置为0,不能按预期工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆