“参数化查询@scanType需要参数 ,但未提供该参数”错误产生的一个原因

  在写一个相册的网站时,出现了如题所述的错误,其中对“@scanType”参数进行赋值的源代码如下:

  SqlParameter para = new SqlParameter("@scanType", (int)ScanType.所有人);

  ScanType为枚举,定义如下:

public enum ScanType
    {
        所有人,
        仅自己,
        仅好友,
    }

  public enum ScanType    
  {
          所有人, 
          仅自己,
          仅好友, 
  }

  经过仔细查找错误发现:SqlParameter函数有多个重载,其中有两个参数的重载有两个方法,分别为:public SqlParameter(string parameterName, object value)和public SqlParameter(string parameterName, SqlDbType dbType),这里相差的就是后面那个参数的类型不同,而如果使用上面的方法对“@scanType”参数进行赋值的话系统会认为是后面那个重载,就是认为“(int)ScanType.所有人”是SqlDbType类型的,而不是我们所要的。

  通过上面的发现,我将传的后面那个参数改为“Convert.ToInt32(ScanType.所有人)”这时就正常了,系统识别了这个参数,并调用了正确的方法(public SqlParameter(string parameterName, object value))。这可能是vs的一个bug吧,对于枚举类型的值作为参数化查询的参数时,应当使用Convert的方法,而不应该使用强制类型转换!

posted on 2010-04-12 15:33  steel1990  阅读(2594)  评论(4)    收藏  举报

导航