老问题:“已有打开的与此连接相关联的 DataReader,必须首先将它关闭”,高手请进
在Asp.Net中,感觉SqlDataReader还是挺好用的。
但最近还是出现了这个问题。。
页面A有不少地方都使用到了这个对象,我都已经将它关闭了。单个用户进程访问这个页面时不会出现出错的提示。两个以上的用户同时刷新这个页面就出错了。
我的SqlConnection是在一个组件里调用的,组件例子如下:
namespace XXXX
{
public abstract class SqlConn
{
static SqlConnection Conn;
public static bool XXOpenConn()
{
Conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnString"]);
if (Conn.State != ConnectionState.Open)
{
try
{
Conn.Open();
return true;
}
catch(SqlException)
{
return false;
}
}
return true;
}
public static SqlConnection getConn()
{
if (XXOpenConn())
return Conn;
else
return null;
}
public static SqlDataReader XXDataReader(string tSQL, SqlConnection tConn)
{
SqlDataReader tReader;
SqlCommand tCmd = new SqlCommand(tSQL, tConn);
tReader = tCmd.ExecuteReader();
tCmd.Dispose();
return tReader;
}
public static Hashtable GetSysConfig()
{
string tSQL = "select A from s_config";
Hashtable configHT = new Hashtable();
SqlConnection meConn = getConn();
SqlDataReader configReader = XXDataReader(tSQL, meConn);
if (configReader.Read())
{
configHT["A"] = configReader["A"].ToString();
}
else
{
configHT["A"] = "";
}
configReader.Close();
meConn.Close();
return configHT;
}
}
}
以上是组件调用Conn已经一些DataReader的方法。。
外部的页面基本上是公用一个Conn连接,有同时使用到多个DataReader的我都会新开一个Conn连接,Read之后也都关闭了。
现在问题是单个用户访问,页面不会出错,多个用户同时打开,就会出错。请问这样的问题应该如何解决?
PS:已确认所有打开的DataReader都有关闭掉。
谢谢