2011-10-07 32 views
3

鑑於下面的代碼行:問題用的SqlParameter構造VS對象初始化

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

我收到以下錯誤: 的SqlParameterCollection僅接受非空的SqlParameter型對象,而不是字符串對象。

然而,重寫它使用對象intialization:

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

的作品就好了。任何指針爲什麼這是發生?

+0

可能是因爲customer.DisplayId爲空而SqlDbType.NVarChar不接受空值。 – CharithJ

回答

2

的問題是放錯地方的右括號:

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

注意,有.Value前2個右括號。當你最初輸入它,你正在做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; 
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); 

,現在你明白爲什麼編譯器是抱怨?

相關問題