存储过程参数的语法

时间:2015-02-05 13:23:49

标签: c#

我有一个值,我试图将其作为参数添加到存储过程。

此参数的值可以是STRING“1”或“NULL”

如果它为NULL,那么我想添加DBNull.Value

的参数

如果它是“1”我想添加参数1(int)

我尝试过多种语法组合但无法正确使用。

这就是我所拥有的:

cmd.Parameters.Add(new SqlParameter("@LinkClickedId", (insertValuesSplit[12] == "NULL") ? Convert.ToInt16(insertValuesSplit[12]) : DBNull.Value));

但我的语法错误为

  

无法确定条件表达式的类型,因为'short'和'System.DBNull'之间没有隐式转换   任何人都可以建议语法应该是什么?

4 个答案:

答案 0 :(得分:1)

尝试将其投射到对象:

(object) Convert.ToInt16(insertValuesSplit[12])

问题在于,您的三元运算符没有可以在Convert.ToInt16(insertValuesSplit[12])DBNull.Value之间识别的常见类型,但是如果您将值转换为object,那么它的工作原理是因为那里 DBNull.Valueobject之间的隐式转换。

答案 1 :(得分:1)

(insertValuesSplit[12] == "NULL") ? Convert.ToInt16(insertValuesSplit[12]) : DBNull.Value)

短手if语句必须返回相同的类型。

Convert.ToInt16(insertValuesSplit[12])返回short

DBNull.Value会返回Object

答案 2 :(得分:0)

三元运算符是一个表达式,因此它有一个类型。编译器尝试确定此类型但是失败,因为您的真实案例是short,但您的错误案例是DBNull

您必须明确地将其中一个投射到object才能使其正常工作,例如
(object) Convert.ToInt16(insertValuesSplit[12])

答案 3 :(得分:0)

条件运算符的true和false子表达式具有DbNull和Int16类型。

您可能需要将结果转换为唯一的基本类型:object

PS。我认为你的情况已经逆转:如果你想要{NULL}而不是解析。