超时时间已到。在从池中获取连接之前超时时间已过?
超时时间已到。在从池中获取连接之前超时时间已过?
老是连接池超时,是连接池没有关闭!
我是个新手,请问下,各位大哥大姐,在哪里解决他的关闭问题,还不能改变原有的类,谢谢了!由于帖子不能太长,我就分成两段!
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
namespace GdVnet.GdVnetClass
{
public class W_SqlHelper
{
public SqlCommandBuilder updatebuilder;
public W_SqlHelper()
{
}
public static readonly string CONN_STRING1= ConfigurationSettings.AppSettings[ "ConnectionString1 "];
public static readonly string CONN_STRING2= ConfigurationSettings.AppSettings[ "ConnectionString2 "];
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
public static DataSet tablesDs=new DataSet();
public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
public static int ExecuteNonQuery(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
{
return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);
}
public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connString);
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
{
return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter[])null);
}
public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
using (SqlConnection cn = new SqlConnection(connectionString))
{
cn.Open();
return ExecuteDataset(cn, commandType, commandText, commandParameters);
}
}
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText)
{
return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);
}
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
get_sqlcommanBuilder(da);
cmd.Parameters.Clear();
return ds;
}
public static void get_sqlcommanBuilder(SqlDataAdapter da)
{
SqlCommandBuilder updatebuilder=new SqlCommandBuilder(da);
}
public static object ExecuteScalar(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
[解决办法]
Up
[解决办法]
数据库连接是非托管资源,所以要手动关闭。即对于SqlConnection,调用它的close和dispose方法。
public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
using (SqlConnection conn = new SqlConnection(connString))
{
}
}
public static int ExecuteNonQuery(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
}
如前一个方法,它用using语句保证调用完毕后数据库连接被释放,而后一个方法,是你传SqlConnection 对象进去,则你在调用后一个方法的时候要在外面释放数据库连接
[解决办法]
就是在调用之前应该先关闭你先前调用了的数据库连接
对数据库的连接要养成及时关闭,conn.close()释放资源,下次访问再打开conn.open()
打开了要记得关闭。