SqlDataReader对象没有关闭在建立SqlDataReader的时候用:
My_cmd.ExecuteReader(CommandBehavior.CloseConnection)方法在用完SqlDataReader后,一定要显式关闭SqlDataReader对象,Connection对象就不用显式关了
My_cmd.ExecuteReader(CommandBehavior.CloseConnection)方法在用完SqlDataReader后,一定要显式关闭SqlDataReader对象,Connection对象就不用显式关了
static string Sqlconnstr=ConfigurationSettings.AppSettings["My_sql_masterefu"];
public void Exec(string Sql_str) {
using(SqlConnection Conn = new SqlConnection(Sqlconnstr))
{ //没有返回的SQL执行
Conn.Open();
SqlCommand My_cmd = new SqlCommand(Sql_str, Conn);
My_cmd.ExecuteNonQuery();
}
}
public SqlDataReader Exec_dr(string Sql_str) {
using(SqlConnection Conn = new SqlConnection(Sqlconnstr))
{
Conn.Open();
SqlCommand My_cmd = new SqlCommand(Sql_str, Conn);
return My_cmd.ExecuteReader();
}
}
public DataTable Exec_dt(string Sql_str) {
using(SqlConnection Conn = new SqlConnection(Sqlconnstr))
{
DataSet ds = new DataSet();
SqlDataAdapter dap = new SqlDataAdapter(Sql_str,Conn);
dap.Fill(ds);
dap.Dispose();
return ds.Tables[0];
} }
}
如果不使用连接池管理,你的每一个连接数据库都会为此连接开一个进程,当连接数量多的时候,数据库DataBase Server的压力可想而知。而使用连接池管理,数据库最多只接受当前设定的最大请求值,其它的请求先进入队列中排队,效率会行到很大提升。建议做法:
使用连接池管理
较晚地打开数据库链接,而较早地关闭它们
使用存储过程