SqlParameter构造函数与对象初始值设定项的问题

时间:2011-10-07 02:58:07

标签: c# sqlparameters

给出以下代码行:

cmd.Parameters.Add(new SqlParameter("@displayId", SqlDbType.NVarChar).Value = customer.DisplayID);

我收到以下错误: SqlParameterCollection只接受非null的SqlParameter类型对象,而不接受String对象。

但是,重写它以使用对象初始化:

cmd.Parameters.Add(new SqlParameter("@displayId", SqlDbType.NVarChar) { Value = customer.DisplayID });

工作得很好。有关为什么会发生这种情况的指针吗?

2 个答案:

答案 0 :(得分:2)

问题是错误的右括号:

cmd.Parameters.Add(new SqlParameter("@displayId", SqlDbType.NVarChar)).Value = customer.DisplayId;

请注意.Value之前有两个右括号。在您最初输入时,您正在cmd.Parameters.Add(...); ...

new SqlParameter("@displayId", SqlDbType.NVarChar).Value = customer.DisplayId

并且评估为customer.DisplayId,因此关于它的消息不接受string类型。

此外,您可以使用

更简洁地添加参数
cmd.Parameters.AddWithValue("@displayId", customer.DisplayId);

至于为什么new SqlParameter("@displayId", SqlDbType.NVarChar).Value = customer.DisplayId会返回customer.DisplayId,请考虑assignment operator返回分配的值作为结果,在这种情况下将是customer.DisplayId。这就是您可以一次为多个变量赋值的原因:

int i, j, k;
i = j = k = 42;

答案 1 :(得分:2)

cmd.Parameters.Add(new SqlParameter("@displayId", SqlDbType.NVarChar).Value = customer.DisplayID);

相同
var customerDisplayId = customer.DisplayID;
new SqlParameter("@displayId", SqlDbType.NVarChar).Value = customerDisplayId;
cmd.Parameters.Add(customerDisplayId);

现在你明白为什么编译器在抱怨吗?