2

我有 12 个参数的存储过程。参数可以为空。我也有 12 个下拉列表。下拉列表值被传递到 sp。当 dropdownlist.selecteditem.value = null 时,我想将下拉列表中的空值传递到过程中。我尝试了以下分配:

int typeid = (Convert.ToInt16(ddlType.SelectedValue.ToString())) == null ? DBNull.Value : (int)(Convert.ToInt16(ddlType.SelectedValue.ToString()));

但我得到了错误:

无法确定条件表达式的类型,因为 'System.DBNull' 和 'int' 之间没有隐式转换

您的帮助将不胜感激。

4

5 回答 5

4

问题是DBNull.Value不能分配给int. 你有一个选择是做这样的事情:

int typeid = string.IsNullOrEmpty(ddlType.SelectedValue) ?
    default(int) :
    Convert.ToInt32(ddlType.SelectedValue);

另一种选择是使用int?

int? typeid = string.IsNullOrEmpty(ddlType.SelectedValue) ?
    (int?)null :
    (int?)Convert.ToInt32(ddlType.SelectedValue);

还有很多其他选择。但是,如果您尝试将值设置为 anint并稍后知道是否选择了某些内容,那么这两个选项非常简单。在第一种情况下,您可以通过稍后比较来推断default(int)它是否null更早。在第二种情况下,它更直接,因为你可以说typeid.HasValue看看它是否null存在。

现在,我取消了通话,因为如果是ToString(),它们将失败。但是,如果这是一个 Windows 窗体应用程序而不是 Web 窗体应用程序(这是我推断的),那么您需要将该值转换为如下字符串:SelectedValuenull

var val = Convert.ToString(ddlType.SelectedValue);
int? typeid = string.IsNullOrEmpty(val) ?
    (int?)null :
    (int?)Convert.ToInt32(ddlType.SelectedValue);

因为Convert.ToString如果值为 . 将返回一个空字符串null

于 2013-09-19T15:16:05.340 回答
1

将变量声明为int? typeID

这将接受整数和空值

在这里,上面的声明表明它可以为空

希望能帮助到你

于 2013-09-19T15:15:08.833 回答
0

试试这个

int typeid = (Convert.ToInt16(ddlType.SelectedValue.ToString())) == null ? (object)DBNull.Value: (int)(Convert.ToInt16(ddlType.SelectedValue.ToString()));
于 2013-09-19T15:12:26.460 回答
0

为什么不首先使用可为空的整数?

int? typeid = string.IsNullOrEmpty(ddlType.SelectedValue)? null: Convert.ToInt16(ddlType.SelectedValue);

如果您的下拉列表没有值,则 typeid 将为 null。如果是这样,它将持有它。

于 2013-09-19T15:17:15.577 回答
0

DropdownList 的 SelectedValue 属性返回一个字符串,因此无需进行 ToString 转换。

int 不是可空类型,因此您不能将空值转换为 int。此外,int 是 int32,而不是 int16。

int? typeId = ddlType.SelectedValue != null : Convert.ToInt32(ddlType.SelectedValue) ? null;
于 2013-09-19T15:19:06.800 回答