0

我有一个 SQL 类型为 smallint(Int16 的 EF 类型)的列,我想在其中插入一个空值,但是当我使用下面的代码时,我得到一个错误,即 null 无法转换为 short。如果语句允许我插入空值,我如何获得这一行?

CollectionID = (ddlCollection.SelectedValue == "None") ? null  : Convert.ToInt16(ddlCollection.SelectedValue)
4

4 回答 4

2

工作代码是做一个 nullablecnvert 像:

CollectionID = (ddlCollection.SelectedValue == "None") ? (Nullable<Int16>)null : Convert.ToInt16(ddlCollection.SelectedValue)
于 2012-12-01T20:10:07.527 回答
1

c# 在数据库中有一个 null 值:DBNull.Value

于 2012-12-01T19:28:46.413 回答
0

第一个问题是您的实体框架属性CollectionID必须标记为 Nullable(如果您使用 EDMX)或声明为short?Nullable<short>如果您使用 Code First。

其次,您需要确保该列的数据库类型也标记为可为空(类似于smallint NULLSQL Server)。

编辑:啊,我想我现在看到了问题。尝试将您的呼叫投射Convert.ToInt16Nullable<short>。三元运算符nulltrue侧面看到 a ,并且类型与侧面的null值不兼容false,这会导致您的错误。

CollectionID = (ddlCollection.SelectedValue == "None")
    ? (Nullable<short>)null 
    : (Nullable<short>)Convert.ToInt16(ddlCollection.SelectedValue)
于 2012-12-01T19:41:06.040 回答
0

与 sqlcommand 参数一起使用

 if(ddl_collection.selectedvalue!="None")
   command.Parameters.AddWithValue("@CollectionID", Convert.ToInt16(ddlcollection.selectedValue));
else
    command.Parameters.AddWithValue("@CollectionID", DBNull.Value);
于 2013-10-18T08:31:26.983 回答