以我的经验,我将确保自己执行以下操作:
- 确保是您为参数定义了 数据类型 。ADO.NET在猜测方面做得不错,但是在某些情况下,它可能会非常糟糕-因此,我将避免使用此方法:
cmd.Parameters.Add("@Name").Value = "Bob";cmd.Parameters.AddWithValue(“@Name”, “Bob”);
让ADO.NET通过传递的值来猜测参数的类型是棘手的,并且如果由于某种原因将其关闭,则这些跟踪和查找的确是棘手的错误!想象一下,当您传入
DBNull.Value-ADO.NET应该选择哪种数据类型时会发生什么?
明确一点-说出您想要的类型!
- 如果您使用的是字符串参数,请确保 明确定义长度 -因此,我也将避免使用此方法:
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob";
如果不提供长度,则ADO.NET可能默认为某个任意值,或者作为值传递的字符串的长度,或者其他方式-
您永远不确定。而且,如果您的长度与存储过程的实际期望不符,您可能会看到转换和其他不愉快的惊喜。因此,如果您定义一个字符串,也要定义其长度!
因此,在您的情况下,唯一对我有效的方法是此方法:
cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob";因为它a)定义要显式使用的数据类型,并且b)显式定义字符串的长度。



