我做了一个类,用来数据库接口用的DataConn:
其中一段代码如下:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace Shop.Components
{
/// <summary>
/// DataConn 的摘要说明。
/// </summary>
public class DataConn
{
public DataConn()
{
isConnect = false;
}
~DataConn()
{
if(isConnect == false)
Disconnect();
} bool isConnect;
SqlConnection sql1 ;


/// <summary>
/// 连接数据库,参数为sql语句
/// </summary>
/// <param name="strconn"></param>
/// <returns></returns>
public  bool  Connect(string strconn)
{
bool result;
//this.strconn = strconn;
SqlConnection sql1 = new SqlConnection(strconn);
this.sql1 = sql1; result = true;
try
{
sql1.Open();
isConnect = true;
}
catch
{

result = false;
}
//strconn = null;
return result;
}
/// <summary>
/// 断开数据库
/// </summary>
/// <returns></returns>
public string Disconnect()
{
try
{
sql1.Close();
}
catch
{

}
//sql1.Dispose();
sql1 = null;
return "数据库已经断开";
}
/// <summary>
/// 使用sqlcommand执行sql语句,参数为sql语句
/// </summary>
/// <param name="strsql"></param>
public int Execute(string strsql)
{
SqlCommand objcmd = new SqlCommand(strsql,sql1);
return objcmd.ExecuteNonQuery();

}
public void ExecuteSp()
{
SqlCommand objcmd2 = new SqlCommand();
objcmd2.CommandType  = CommandType.StoredProcedure;
objcmd2.Connection = sql1;
}
public SqlCommand ReturnCommand()
{
SqlCommand objcmd = new SqlCommand();
objcmd.Connection = sql1;
return objcmd;
}
/// <summary>
/// 参数为sql语句,返回datareader
/// </summary>
/// <param name="strsql"></param>
/// <returns></returns>
public SqlDataReader ReturnDataReader(string strsql)
{
SqlCommand objcmd = new SqlCommand(strsql,sql1);
SqlDataReader objreader = objcmd.ExecuteReader();
return objreader;
}
/// <summary>
/// 参数为sql语句,返回dataset
/// </summary>
/// <param name="strsql"></param>
/// <returns></returns>
public DataSet ReturnDataSet(string strsql,string strTableName)
{ SqlDataAdapter da = new SqlDataAdapter(strsql,sql1);
DataSet ds = new DataSet();
da.Fill(ds,strTableName);
return ds; }
}
}
只要我在调用此方法的页面连续刷新5次以上就会提示如下错误:ExecuteReader 需要打开的并且可用的连接。该连接的当前状态是 Closed。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: ExecuteReader 需要打开的并且可用的连接。该连接的当前状态是 Closed。源错误: 
行 99:  {
行 100: SqlCommand objcmd = new SqlCommand(strsql,sql1);
行 101: SqlDataReader objreader = objcmd.ExecuteReader();
行 102: return objreader;
行 103: }
 源文件: c:\inetpub\wwwroot\shop\components\dataconn.cs    行: 101 我找了很久也查不出什么原因,高手请指点下.谢谢!~~

解决方案 »

  1.   

    if(!isConnect) sql1.Oen();
    SqlCommand objcmd = new SqlCommand(strsql,sql1);
    SqlDataReader objreader = objcmd.ExecuteReader();
    return objreader;
      

  2.   

    楼上的兄弟,我加了你指出的那句if(!isConnect) sql1.Oen();
    刷新5次以上还是出现:ExecuteReader 需要打开的并且可用的连接。该连接的当前状态是 Closed。
      

  3.   

    我对数据库连接在web.config里做了如下修改:
    <appSettings>
         <add key="Shopping" value="server=192.168.0.112;uid=sa;pwd=53344521;database=Shop;pooling=false"/>
         <add key="PicStore" value="server=192.168.0.112;uid=sa;pwd=53344521;database=ShopPics;pooling=false"/>
     </appSettings>把pooling=true 修改成false
     就不会有我上面提示的错误,但我不知道pooling=true 或false的区别
    知道的请告诉下!~~~