首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将null赋值给SqlParameter

将null赋值给SqlParameter
EN

Stack Overflow用户
提问于 2010-12-30 00:42:08
回答 17查看 320.6K关注 0票数 217

下面的代码给出了一个错误--“没有从DBnull到int的隐式转换”。

代码语言:javascript
复制
SqlParameter[] parameters = new SqlParameter[1];    
SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int);
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : AgeItem.AgeIndex;
parameters[0] = planIndexParameter;
EN

回答 17

Stack Overflow用户

发布于 2013-12-28 03:08:19

The accepted answer建议使用cast。但是,大多数SQL类型都有一个特殊的Null字段,可以用来避免这种转换。

例如,SqlInt32.Null“表示可以分配给SqlInt32类的这个实例的DBNull。”

代码语言:javascript
复制
int? example = null;
object exampleCast = (object) example ?? DBNull.Value;
object exampleNoCast = example ?? SqlInt32.Null;
票数 119
EN

Stack Overflow用户

发布于 2010-12-30 00:52:52

除非在存储过程中指定了默认值(如果您正在使用存储过程),否则需要在SQLCommand中将DBNull.Value作为null参数传递。最好的方法是在查询执行之前为任何缺少的参数分配DBNull.Value,下面的foreach将完成这项工作。

代码语言:javascript
复制
foreach (SqlParameter parameter in sqlCmd.Parameters)
{
    if (parameter.Value == null)
    {
        parameter.Value = DBNull.Value;
    }
}

否则,请更改此行:

代码语言:javascript
复制
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : AgeItem.AgeIndex;

如下所示:

代码语言:javascript
复制
if (AgeItem.AgeIndex== null)
    planIndexParameter.Value = DBNull.Value;
else
    planIndexParameter.Value = AgeItem.AgeIndex;

因为您不能在条件语句中使用不同类型的值,因为DBNull和int彼此不同。希望这能有所帮助。

票数 41
EN

Stack Overflow用户

发布于 2017-04-15 01:18:37

只需一行代码,尝试如下所示:

代码语言:javascript
复制
var piParameter = new SqlParameter("@AgeIndex", AgeItem.AgeIndex ?? (object)DBNull.Value);
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4555935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档