C# 存储过程参数的语法
我试图将一个值作为参数添加到存储过程中 此参数的值可以是字符串“1”或“NULL” 如果为NULL,那么我想添加C# 存储过程参数的语法,c#,C#,我试图将一个值作为参数添加到存储过程中 此参数的值可以是字符串“1”或“NULL” 如果为NULL,那么我想添加DBNull.Value 如果是“1”,我想添加参数1(int) 我已经尝试了许多语法组合,但都不正确 这就是我所拥有的: cmd.Parameters.Add(new SqlParameter("@LinkClickedId", (insertValuesSplit[12] == "NULL") ? Convert.ToInt16(insertValuesSplit[12]) : D
DBNull.Value
如果是“1”,我想添加参数1(int)
我已经尝试了许多语法组合,但都不正确
这就是我所拥有的:
cmd.Parameters.Add(new SqlParameter("@LinkClickedId", (insertValuesSplit[12] == "NULL") ? Convert.ToInt16(insertValuesSplit[12]) : DBNull.Value));
但是我有一个语法错误
无法确定条件表达式的类型,因为“short”和“System.DBNull”之间没有隐式转换
有人能建议一下语法应该是什么吗
尝试将其投射到对象:
(object) Convert.ToInt16(insertValuesSplit[12])
问题是,三元运算符无法在Convert.ToInt16(insertValuesSplit[12])
和DBNull.Value
之间区分常见类型,但如果将值强制转换到对象
,则它会起作用,因为DBNull.Value
和对象
之间存在隐式转换
(insertValuesSplit[12] == "NULL") ? Convert.ToInt16(insertValuesSplit[12]) : DBNull.Value)
简短的if语句必须返回相同的类型
Convert.ToInt16(insertValuesSplit[12])
返回一个short
DBNull.Value
返回一个对象
三元运算符是一个表达式,因此它有一个类型。编译器尝试确定此类型,但失败,因为您的真实大小写是short
,而您的假大小写是DBNull
您必须将其中一个显式强制转换为对象
,以使其工作,例如(object)Convert.ToInt16(insertValuesSplit[12])
条件运算符的true和false子表达式的类型为DbNull和Int16
您可能需要将结果强制转换为唯一常见的基类型:对象
(insertValuesSplit[12] == "NULL") ? Convert.ToInt16(insertValuesSplit[12]) : DBNull.Value)
另外,我认为您的条件是相反的:如果“NULL”您想要的是
DBNUll
,而不是解析。您是否阅读过的文档?它说:第一个表达式和第二个表达式的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。顺便说一下,我认为应该反转指定给真/假条件的值