3

给定以下代码行:

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

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

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

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

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

4

2 回答 2

2

问题是一个放错位置的右括号:

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

请注意,前面有 2 个右括号.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,请考虑赋值运算符将被赋值的值作为其结果返回,在这种情况下,它将是customer.DisplayId。这就是为什么您可以一次为多个变量赋值的原因:

int i, j, k;
i = j = k = 42;
于 2011-10-07T03:05:47.383 回答
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);

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

于 2011-10-07T03:06:08.720 回答