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

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

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

试试这个,

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

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

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

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

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

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

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

从SQL到C#>

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

从C#到SQL>

将DBNull添加到您的参数中

试试DBNull.Value ; 比如:

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

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

sBO.Client_id = DBNull.Value

DBNull.Value适用于所有对象

考虑到ParamValue包含查询的结果为整数或DBNull.Value,我将它转换为int? 这条路:

 var Result = ParamValue as int?; 

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