为什么
scIns.Parameters.Add(new SqlParameter("@v30", 0.00m));
导致“@ v30 undefined”错误,但
decimal dZero = 0.00m;
scIns.Parameters.Add(new SqlParameter("@v30", dZero));
工作正常吗?
答案 0 :(得分:3)
SqlParamter有两个不同的重载,有两个参数,第一个是字符串,第二个是SqlDbType或object。
在第一种情况下,当传入0.00m时,它会转换为Int64,而在第二种情况下,因为传入的值是十进制类型,然后使用SqlDbType.Decimal。
查看此Link
更新:
找到了另一个stackoverflow问题,讨论了这一问题并得到了详细的答案。 :)
答案 1 :(得分:1)
如果你查看调试器,你会发现在第一种情况下,参数的DbType是Int64,而在第二种情况下它是十进制。
尝试使用其他一个SqlParameter ctor重载,您可以在其中显式指定SqlDbType。
希望有所帮助,
约翰