关于使用数据库连接类在多个框架页同时访问数据库的问题

samven 2009-06-19 10:55:05
Database.cs:


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;

namespace CMIR.OPEN
{
public class Database
{
//连接字符串
private static SqlConnection cn;

//获取连接字符串
internal static string getconnstr()
{
string constr;
constr = System.Configuration.ConfigurationManager.ConnectionStrings["connstring"].ToString();
return constr;
}

//打开数据库
internal static void open()
{
string constr;
constr = getconnstr();
cn = new SqlConnection(constr);
if (cn.State != ConnectionState.Open)
{
cn.Open();
}
}

//关闭数据库
internal static void close()
{
cn.Dispose();
cn.Close();
}

//返回DataReader对象
internal static SqlDataReader datareader(string sql)
{
open();
SqlCommand cmd = new SqlCommand(sql, cn);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}
}
}


a.aspx.cs:

SqlDataReader dr = Database.datareader("select * from Table");
if (dr.Read())
{
;
}
dr.Close();
Database.close();


B.aspx:

<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>
<iframe src="a.aspx"></iframe>


访问b.aspx页面后在iframe里出现.net错误:

ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。


请问我的程序哪里有错误?如何修改数据库连接类?谢谢!帮助解决给50分!
...全文
26 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
samven 2009-06-19
  • 打赏
  • 举报
回复
DataSet也是一样的,同样出错。
BernardSun 2009-06-19
  • 打赏
  • 举报
回复
那你就用DataSet试试好了
samven 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 BernardSun 的回复:]
那些方法也都不要static了
internal改成public
[/Quote]

BernardSun:
你的方法可以解决这种问题,可是去掉static后数据库访问类不能实例化访问,这样就必须在每个页面.cs里都要创建对象Database db = new Database();,感觉这样很麻烦,直接用Database.方法名访问方便多了,还有没有更好的解决办法?
BernardSun 2009-06-19
  • 打赏
  • 举报
回复
那些方法也都不要static了
internal改成public
samven 2009-06-19
  • 打赏
  • 举报
回复
大家帮忙看看这错误啊。多个框架页同时调用问题很多,应该怎么写数据库访问类?
samven 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 BernardSun 的回复:]
private static SqlConnection cn;
别用static
[/Quote]

好像是这个问题,但是去掉static后在下载的方法会出错,应又如何调用?
//打开数据库
internal static void open()
{
string constr;
constr = getconnstr();
cn = new SqlConnection(constr);
if (cn.State != ConnectionState.Open)
{
cn.Open(); }
}

//关闭数据库
internal static void close()
{
cn.Dispose();
cn.Close();

}
haonanxxx 2009-06-19
  • 打赏
  • 举报
回复
看了半天没发现错误。你断点调试下。断点很好用。
BernardSun 2009-06-19
  • 打赏
  • 举报
回复
private static SqlConnection cn;
别用static
evaa006 2009-06-19
  • 打赏
  • 举报
回复
ding
samven 2009-06-19
  • 打赏
  • 举报
回复
这个似乎是数据库连接类的问题,但是我不知道哪里有错误!
samven 2009-06-19
  • 打赏
  • 举报
回复
还有这种错误:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


open();
SqlCommand cmd = new SqlCommand(sql, cn);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}

samven 2009-06-19
  • 打赏
  • 举报
回复
dr.Close();
Database.close();

这里已经关闭了。
我不懂电脑 2009-06-19
  • 打赏
  • 举报
回复
SqlDataReader会保持连接,需要用完后关闭。这样就不会连接的当前状态为正在连接
samven 2009-06-19
  • 打赏
  • 举报
回复
在等
BernardSun 2009-06-19
  • 打赏
  • 举报
回复
现在asp.net版就有一个求数据访问层代码的帖子,已经有很多人回了,你去参考一下吧
samven 2009-06-19
  • 打赏
  • 举报
回复
是的。static有问题,以前我变是用new Database(),每次都这样很麻烦,而且每次都得open()和close()。
微软的SQLHelper怎么弄的?请教一下。
BernardSun 2009-06-19
  • 打赏
  • 举报
回复
看来就是那个静态链连接的问题了,要不就把连接写方法里了,
在这里麻烦一下好过写多个Database db = new Database()

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧