如何将SQL参数传递为整数数据类型变量的空值?

9
如何将 SQL 参数作为 null 值传递到整数数据类型变量中?
        StockBO sBO = new StockBO();
        sBO.Mode = 2;
        if (ddcmpanyname.SelectedIndex != 0)
        {
            sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue);
        }
        else
        {
            sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types.
       sBO.Client_id =DBNull.Value;//Cannot implicitly convert type 

        }
        ds=_StockController.StockGet(sBO);

我把代码改成这样,但出现了错误,我检查了一下else部分。
6个回答

22

试试这个:

else
    {
        sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
    }

4
如果您想在SQL参数中传递空值,应该使用DBNull.Value作为您的SqlParameter的值(或者您正在使用的其他类型)。如果您想在C#中表示可空整数,请使用int?(或者Nullable<int> - 它们是相同的东西)。
普通的非可空值类型变量中无法存储空值。可空值类型仍然是结构体,但它们包装了非可空类型并添加了一个布尔值来指示它是否是“真实”值或空值。C#围绕它添加了语法糖,允许您使用null字面量进行赋值、各种转换、提升操作等:
int? value = 5;
value = null;
if (value == null)
{
    ...
}

如果这并没有帮助到你,请告诉我们更多关于你想要做什么的信息。
编辑:好的,看起来StockBO.Client_id应该是short?类型,但这样就不能直接设置DBNull.Value了。你应该使用null将客户端ID设置为null值。每当在对象和SQL参数及结果之间进行转换时,你需要自己执行这种转换——如果你经常遇到这种情况,可以编写一些辅助方法来使其更容易。
当然,如果你开始使用LINQ to SQL或类似的东西,你就不需要担心DBNull.Value——LINQ提供程序通常直接支持可空值类型。

我非常自豪能够看到这篇帖子。谢谢,马大师。我已经更新了我的问题,请您检查一下。 - Ayyappan Anbalagan

2
尝试使用 DBNull.Value;例如:
dbParamId.Value = (object)MyID ?? DBNull.Value;

1

从SQL到C# >

int number;
Int32.TryParse(paramvalue, out number);

从C#到SQL >

将DBNull添加到您的参数中


1

最好直接分配DBNull.Value,例如:

sBO.Client_id = DBNull.Value

DBNull.Value适用于所有对象。


0

考虑到ParamValue包含查询结果作为整数或DBNull.Value,我将其转换为int?

var Result = ParamValue as int?;

要确定Result是否为空,请检查Result.HasValue。否则,将其用作普通整数或Result.Value。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接