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