我有一个SQL类型为smallint(EF类型为Int16)的列,我想插入一个空值但是当我使用下面的代码时,我得到的错误是null无法转换为short。如果允许我插入null的语句,我怎么能得到这一行呢?
CollectionID = (ddlCollection.SelectedValue == "None") ? null : Convert.ToInt16(ddlCollection.SelectedValue)
答案 0 :(得分:2)
工作代码是执行nullablecnvert,如:
CollectionID = (ddlCollection.SelectedValue == "None") ? (Nullable<Int16>)null : Convert.ToInt16(ddlCollection.SelectedValue)
答案 1 :(得分:1)
c#在数据库中的值为null: DBNull.Value
答案 2 :(得分:0)
第一个问题是,如果您使用的是Code,则必须将您的Entity Framework属性CollectionID
标记为Nullable(如果您使用的是EDMX)或声明为short?
或Nullable<short>
第一
其次,您需要确保该列的数据库类型也标记为可为空(类似于SQL Server中的smallint NULL
)。
编辑:啊,我想我现在看到了问题。尝试将您的来电转为Convert.ToInt16
至Nullable<short>
。三元运算符在null
侧看到true
,并且类型与null
一侧的false
值不兼容,这会导致您的错误。
CollectionID = (ddlCollection.SelectedValue == "None")
? (Nullable<short>)null
: (Nullable<short>)Convert.ToInt16(ddlCollection.SelectedValue)
答案 3 :(得分:0)
将它与sqlcommand参数一起使用
if(ddl_collection.selectedvalue!="None")
command.Parameters.AddWithValue("@CollectionID", Convert.ToInt16(ddlcollection.selectedValue));
else
command.Parameters.AddWithValue("@CollectionID", DBNull.Value);