簡體   English   中英

SqlParameter構造函數與對象初始值設定項的問題

[英]Issues with SqlParameter constructor vs object initializer

給出以下代碼行:

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 });

工作得很好。 關於為什么會發生這種情況的任何指針?

問題是錯誤的右括號:

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 ,請考慮賦值運算符返回被指定為其結果的值,在這種情況下將是customer.DisplayId 這就是您可以一次為多個變量賦值的原因:

int i, j, k;
i = j = k = 42;
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);

現在你明白為什么編譯器會抱怨嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM