scIns.Parameters.Add(new SqlParameter("@v30", 0.00m));
導致 「@ V30未定義」 錯誤,但
decimal dZero = 0.00m;
scIns.Parameters.Add(new SqlParameter("@v30", dZero));
的作品好不好?
scIns.Parameters.Add(new SqlParameter("@v30", 0.00m));
導致 「@ V30未定義」 錯誤,但
decimal dZero = 0.00m;
scIns.Parameters.Add(new SqlParameter("@v30", dZero));
的作品好不好?
SqlParamter有兩個參數兩個不同的過載,第一個是字符串,第二個是SqlDbType或對象。
在第一種情況下,當0.00m被傳入時,它被轉換爲Int64,而在第二種情況下,因爲傳入的值是十進制類型,所以它使用SqlDbType.Decimal。
看看這個Link
更新:
發現了另一個問題stackoverflow談到有關這一點,並有一個詳細的解答。 :)
似乎C#的重載解析中有一個怪癖,我沒有意識到。任何數字類型的零字符都會匹配並隱式轉換爲任何'enum'類型(不論enum是否包含零值)。但是,其他值不會被轉換。 –
我認爲有這樣的事情很有趣,我忙着通過System.Data與反射器試圖查看SqlParameter類是否進行任何轉換。感謝您的更新Matti! – Jethro
+1,很好看...... –
如果你看看調試器,你會發現在第一種情況下,參數的DbType是Int64,在第二種情況下,它是Decimal。
嘗試使用其中一個SqlParameter ctor重載,您明確指定SqlDbType。
希望幫助,
約翰
您確定這是唯一的區別嗎?不管你是否使用中間變量... –
你能告訴我們整個代碼片段嗎? –
是的,提到的錯誤不在發佈的代碼中,但必須在其他地方 – Rahul