9

如何将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);

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

4

6 回答 6

22

试试这个,

else
    {
        sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
    }
于 2010-07-15T06:56:27.887 回答
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 设置为空值。每当您在对象和 SQL 参数和结果之间进行转换时,您都需要自己执行这种转换 - 如果您发现自己经常这样做,请制定一些帮助方法以使其更容易。

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

于 2010-07-15T05:57:33.577 回答
2

试试DBNull.Value;比如:

dbParamId.Value = (object)MyID ?? DBNull.Value;
于 2010-07-15T06:01:11.293 回答
1

从 SQL 到 C# >

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

从 C# 到 SQL >

将 DBNull 添加到您的参数

于 2010-07-15T05:58:41.890 回答
1

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

sBO.Client_id = DBNull.Value

DBNull.Value 适用于所有对象

于 2013-06-24T11:50:14.503 回答
0

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

var Result = ParamValue as int?;

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

于 2010-07-15T06:06:30.120 回答