给出以下代码行:
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 });
工作得很好。有关为什么会发生这种情况的指针吗?
答案 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);
现在你明白为什么编译器在抱怨吗?