Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储过程参数的语法_C# - Fatal编程技术网

C# 存储过程参数的语法

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

我试图将一个值作为参数添加到存储过程中

此参数的值可以是字符串“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”之间没有隐式转换 有人能建议一下语法应该是什么吗


尝试将其投射到对象:

(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
,而不是解析。

您是否阅读过的文档?它说:第一个表达式和第二个表达式的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。顺便说一下,我认为应该反转指定给真/假条件的值