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

数据库连接是这样的,每当小弟我在页面上使用两个以上的SqlDataReader时,就已有打开的与此命令相关联的 DataReader,必须首先将它关闭 急

2012-01-03 
数据库连接是这样的,每当我在页面上使用两个以上的SqlDataReader时,就已有打开的与此命令相关联的 DataRea

数据库连接是这样的,每当我在页面上使用两个以上的SqlDataReader时,就已有打开的与此命令相关联的 DataReader,必须首先将它关闭 急!

C# code
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;/// <summary>///创建时间:2008-8-4/// 创 建 人:吕豪/// 作    用:用于数据库的链接,/// </summary>public class DataBase{    /// <summary>    /// 保护变量,数据库连接    /// </summary>    protected SqlConnection Connection;    /// <summary>    /// 保护变量,数据库链接串    /// </summary>    protected string ConnectionString;    /// <summary>    /// 构造函数    /// </summary>    /// <spram name=ConnectionString>数据库连接字符串</spram>    public DataBase()    {        ConnectionString = ConfigurationManager.AppSettings["SqlCoon"];    }    /// <summary>    /// 析构函数。释放非托管资源    /// </summary>    ~DataBase()    {        try        {            if (Connection != null)                Connection.Close();        }        catch { }        try        {            Dispose();        }        catch { }    }    /// <summary>    /// 保护方法,打开数据库连接    /// </summary>    protected void open()    {        if (Connection == null)        {            Connection = new SqlConnection(ConnectionString);        }        if (Connection.State.Equals(ConnectionState.Closed))        {            Connection.Open();        }    }    /// <summary>    /// 公有方法,关闭数据库连接    /// </summary>    public void Close()    {        if (Connection != null)        {            Connection.Close();        }    }    /// <summary>    /// 公有方法。释放资源    /// </summary>    public void Dispose()    {        //确保数据库被关闭        if (Connection != null)        {            Connection.Dispose();            Connection = null;        }    }    /// <summary>    /// 共有方法,获取数据,返回一个SqldataReader()    /// </summary>    /// <param name="SqlString">Sql语句</param>    /// <returns>SqlDataReader</returns>    public SqlDataReader GetSaDataReader(string SqlString)    {        open();        SqlCommand cmd = new SqlCommand(SqlString, Connection);        SqlDataReader reader = cmd.ExecuteReader();        return reader;               reader.Close();                Connection.Close();            }    /// <summary>    /// 共有方法,返回DataSet    /// </summary>    /// <param name="SqlString"></param>    /// <returns></returns>    public DataSet GetDataSet(string SqlString)    {        open();        SqlDataAdapter adapter = new SqlDataAdapter(SqlString, Connection);        DataSet dataset = new DataSet();        adapter.Fill(dataset);        Close();        adapter.Dispose();        dataset.Dispose();        return dataset;    }    /// <summary>    /// 共有方法,执行增,删,改    /// </summary>    /// <param name="SqlString">Sql语句</param>    /// <returns>true Or false</returns>    public bool ExecuteInfo(string SqlString)    {                  open();            SqlCommand cmd = new SqlCommand(SqlString, Connection);            cmd.ExecuteNonQuery();            return true;    }    /// <summary>    /// 执行统计信息    /// </summary>    /// <param name="SqlString"></param>    /// <returns></returns>    public int CountInfo(string SqlString)    {        open();        SqlCommand cmd = new SqlCommand(SqlString, Connection);        int i =Convert.ToInt32(cmd.ExecuteScalar());        return i;    }      }



该怎么解决!大家帮办忙!!

[解决办法]
要么在获取另一个DataReader之前,关闭当前DataReader(但是别关闭了Connection对象),在重新设置Command对象的CommandText属性,再调用ExecuteReader()方法。



或者干脆new 一个Command对象得了。
[解决办法]

C# code
/// <summary>    /// 共有方法,获取数据,返回一个SqldataReader()    /// </summary>    /// <param name="SqlString">Sql语句</param>    /// <returns>SqlDataReader</returns>    public SqlDataReader GetSaDataReader(string SqlString)    {        open();        SqlCommand cmd = new SqlCommand(SqlString, Connection);        SqlDataReader reader = cmd.ExecuteReader();        return reader;               //reader.Close();这句注释掉                //Connection.Close();这句注释掉            }
[解决办法]
不是告诉你了吗?
[解决办法]
public SqlDataReader GetSaDataReader(string SqlString)
{
open();
SqlCommand cmd = new SqlCommand(SqlString, Connection);

SqlDataReader reader = cmd.ExecuteReader();
return reader;

reader.Close();

Connection.Close();

}
你已经return 了所以红色的部分就不会执行了。
然后你又用相同的连接打开命令肯定会出错了。
[解决办法]
同时发两个贴来问这个问题。。。- -!

[解决办法]
探讨
该怎么做才不出现错误 ,我每调用的时候只要在一个页面上使用两个以上的查询的时候就出现错误,要关闭Reader

[解决办法]
up

热点排行