3

次のコード行があるとします。

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

次のエラーが表示されます: SqlParameterCollection は、String オブジェクトではなく、null 以外の SqlParameter 型のオブジェクトのみを受け入れます。

ただし、オブジェクトの初期化を使用するように書き換えます。

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 に答える