为什么老出现这样错误:"连接已经打开(state=Open)。"
代码如下:
private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
       string strconn=ConfigurationSettings.AppSettings["dsn"];
       SqlConnection cn=new SqlConnection(strconn);
       cn.Open();
       string DeleteCmd  = "delete from see where name=@sname";
       SqlCommand cm = new SqlCommand(DeleteCmd,cn);
       cm.Parameters.Add(new SqlParameter("@sname",SqlDbType.VarChar,50));
       cm.Parameters["@sname"].Value = DataGrid1.DataKeys[e.Item.ItemIndex];
      cm.Connection.Open();
    try
   {
  cm.ExecuteNonQuery();
  Message.Text = "删除成功";
    }
   catch (SqlException)
   {
  Message.Text = "无法删除";
   }
     cm.Connection.Close();
     BindGrid();        }

解决方案 »

  1.   

    试过了.没用的
     string  strconn=ConfigurationSettings.AppSettings["dsn"];  
                 SqlConnection  cn=new  SqlConnection(strconn);  
                 cn.Open();  
    全删除了,还出现这个问题
      

  2.   

    cm.Connection.Open();
    或者cn.Open();
    删除掉其中一个就可以了
      

  3.   

    try
       {
      cm.ExecuteNonQuery();
      Message.Text = "删除成功";
        }
       catch (SqlException)
       {
      Message.Text = "无法删除";
       }
    finally
    {
         cm.Connection.Close();//最好把关闭放在这里面
    }
         BindGrid();
      

  4.   

    private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
           string strconn=ConfigurationSettings.AppSettings["dsn"];
           SqlConnection cn=new SqlConnection(strconn);
           cn.Open();
           string DeleteCmd  = "delete from see where name=@sname";
           SqlCommand cm = new SqlCommand(DeleteCmd,cn);
           cm.Parameters.Add(new SqlParameter("@sname",SqlDbType.VarChar,50));
           cm.Parameters["@sname"].Value = DataGrid1.DataKeys[e.Item.ItemIndex];
        try
       {
      cm.ExecuteNonQuery();
      Message.Text = "删除成功";
        }
       catch (SqlException)
       {
      Message.Text = "无法删除";
       }
    finally
    {
         cn.Close();
    }
         BindGrid();        }这样试,应该没错的
      

  5.   

    将cn.Open();这句之前改成带验证的:
    if(cn.State == ConnectionState.Close)
    cn.Open
    end if
      

  6.   

    cn.Open() 和 cm.Connection.Open() 重复了
    把 cm.Connection.Open() 删掉
      

  7.   

    在最前面一句先加上
    cn.Close();再把cn.Open();删掉
      

  8.   

    cm.Connection.Open();删掉试试!
      

  9.   

    我觉得你最好封装一个类,来进行执行sql语句的函数。是不是你其他地方打开后没关闭?
    cm.Connection.Open();删掉后把上面的cn。open()移动到这句的位置。
    这样应该没错误了