这是错误信息:错误 14 “System.Data.SqlClient.SqlCommand.Dispose(bool)”不可访问,因为它受保护级别
下面是出错代码:
 using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        DataSet ds = new DataSet();
                        try
                        {
                            da.Fill(ds, "ds");
                            cmd.Parameters.Clear();
                        }
                        catch (SqlException ex)
                        {
                           
                                throw new Exception(ex.Message);
                        }
                        finally
                        {
                            cmd.Dispose();
                            conn.Close();
                        }我看了自己程序中Dispose方法的定义:是sqlcommand中的 protected override void Dispose(bool disposing);另外一个程序中的定义为:component中的好像是自己写的一个监听System.ComponentModel.Component.Disposed 请问各位前辈:
①这两个都是我自己机子上的包,为什么两个的定义会不一样,是程序中的设置么?我没有在程序中找到
②我上面提到的那个错误怎么解决呢?Dispose方法Dbhelpersql

解决方案 »

  1.   

    SqlCommand类继承自System.ComponentModel.Component,
    而Dispose方法是在Component类中定义的,形式为public void Dispose();
    它的重载形式为protected void Dispose(bool disposing);
    一个可以外部调用,一个不行。其实Dispose()方法内部调用Dispose(true);代码上看,cmd.Dispose();应该没有问题
      

  2.   

    不需要执行DbCommand的什么Dispose。如果你不知道为什么要调用,就不要画蛇添足地调用。删掉它。
      

  3.   

    一些公用性质的类的对象都会给提供Close或者Dispose方法,不需要自己再去写,如果没有的话,你就不用管了,一般来说你要是不知道该不该Close或者Dispose的话,就用Using。
      

  4.   

    using 会自动释放资源的,你还调用一次 Dispose 肯定报错了。