如何在整数数据类型变量中将sql参数作为空值传递?

时间:2010-07-15 05:53:28

标签: c# types integer sqlparameters

如何将sql参数作为空值传递给整数数据类型变量?

        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);

我更改了这样的代码,它给出了错误,就像我的评论检查其他部分

6 个答案:

答案 0 :(得分:20)

试试这个,

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

答案 1 :(得分:4)

你的意思并不完全清楚。如果您尝试在SQL参数中传递空值,则应使用DBNull.Value作为SqlParameter(或您正在使用的任何类型)的值。如果您想在C#中表示可以为空的整数,请使用int?(或Nullable<int> - 它们是相同的。)

您不能在正常的非可空值类型变量中存储空值。可空值类型仍然是结构,但它们包装非可空类型并添加一个布尔值以指示它是“真实”值还是null。 C#在其周围添加了语法糖,允许您使用null字面值进行分配,各种转换,提升运算符等:

int? value = 5;
value = null;
if (value == null)
{
    ...
}

如果这没有帮助,请向我们提供有关您正在尝试做什么的更多信息。

编辑:好的,看起来StockBO.Client_id应该是short?类型 - 但是这样就不允许直接设置DBNull.Value。您应该使用null将客户端ID设置为空值。无论何时在对象和SQL参数和结果之间进行转换,您都需要自己执行这种转换 - 如果您发现自己经常这样做,请制定一些帮助方法以使您更容易。

当然,如果您开始使用LINQ to SQL或类似的东西,您不必担心DBNull.Value - LINQ提供程序倾向于直接支持可为空的值类型。

答案 2 :(得分:1)

从SQL到C#&gt;

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

从C#到SQL&gt;

将DBNull添加到参数

答案 3 :(得分:1)

试试DBNull.Value;比如:

dbParamId.Value = (object)MyID ?? DBNull.Value;

答案 4 :(得分:1)

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

sBO.Client_id = DBNull.Value

DBNull.Value适用于所有对象

答案 5 :(得分:0)

考虑到ParamValue包含查询结果为整数或DBNull.Value,我将它以这种方式转换为 int?

var Result = ParamValue as int?;

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