locked
FAQs: 为什么在ADO.NET中不能把0作为值传给SQL参数? RRS feed

  • 问题

  • 为了帮助大家更好地学习 LINQ to SQL 技术,微软论坛技术支持团队编辑了一些列的 LINQ to SQL 常见问题及解答" 精华帖。

    本帖的主题是:为什么在ADO.NET中不能把0作为值传给SQL参数?

    如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。

    如果您想阅读更多的 "LINQ to SQL 常见问题及解答",请打开索引页面:

    http://social.msdn.microsoft.com/Forums/zh-CN/adonetzhchs/thread/f968dfe5-f9e3-4ed0-9c7f-cf26837ea828


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年5月3日 9:08

答案

  • 当我们为SqlCommand对象添加参数,如果参数值是0(零),它被当作参数没有被指定任何值(可能为空),在执行command.ExecuteReader()语句之后,.NET中抛出一个异常说未指定的参数。

    解决方案:

    当您指定一个值参数的对象,就会被微软.NET框架推断出来是SqlDbType的对象类型

    使用时要小心使用这个SqlParameter的构造函数重载来指定整数参数值。由于此重载采用类型对象的值,你必须转换积分值对象类型,如果值是零,如下面的C#示例所示。

    Parameter = new SqlParameter("@pname", Convert.ToInt32(0));

    如果你不执行这个转换,编译器假定您正在尝试调用的SqlParameter(string,SqlDbType)构造函数重载。

     

    相关帖子:

    http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/3055d4d6-8c3f-4b21-86be-e553bb46f286

    http://msdn.microsoft.com/en-us/library/0881fz2y.aspx
    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年5月3日 9:08