数据库连接是这样的,每当我在页面上使用两个以上的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 了所以红色的部分就不会执行了。
然后你又用相同的连接打开命令肯定会出错了。
[解决办法]
同时发两个贴来问这个问题。。。- -!
[解决办法]
[解决办法]
up