首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ExecuteNonQuery 要求已打开且可用的连接解决办法

2012-01-06 
ExecuteNonQuery 要求已打开且可用的连接.....using System.Data.SqlClient/// summary/// DbObject 的

ExecuteNonQuery 要求已打开且可用的连接
.....
using System.Data.SqlClient;
/// <summary>
/// DbObject 的摘要说明
/// </summary>
/// 
namespace Shuihuren

//这里是我写的 以后用的
public SqlConnection Conn
  {
  get
  {
  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
  return conn;
  }
  }

  public void Open()
  {
  SqlConnection conn = this.Conn;  
  conn.Open();
  }
 public int RunSQL(String sql)
  {
  SqlCommand cmd = new SqlCommand(sql);
   
  this.Open();
  cmd.Connection = Conn;
  int a = cmd.ExecuteNonQuery();
  return a;
  }
}

//

页面代码 
.....
using Shuihuren;

;...

  protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
  {
  DBClass db = new DBClass();
  string id = GridView1.DataKeys[e.RowIndex].Values.ToString();
  string name = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1")).Text;

  string sql = "update product set name='"+name+"' where id="+id+" ";
   
  int a = db.RunSQL(sql);
  GridView1.EditIndex = -1;
  GridViewBind();
  }

这样为什么说 

ExecuteNonQuery 要求已打开且可用的连接。连接的当前状态为已关闭。

[解决办法]
public int RunSQL(String sql) 

SqlCommand cmd = new SqlCommand(sql); 

this.Open(); 
cmd.Connection = Conn; 
int a = cmd.ExecuteNonQuery(); 
return a; 


改为
public int RunSQL(String sql) 

SqlCommand cmd = new SqlCommand(sql); 

cmd.Connection = Conn; 
comd.Connection.Open();
int a = cmd.ExecuteNonQuery(); 
return a; 


PS:你的这段代码似乎结构上不太合理.参见SqlHelper
[解决办法]
同一个conn不可以同时打开两次的

热点排行