关闭数据库链接问题。。。。

IndexRegisterLogin 2010-11-04 10:04:26
数据库链接类里面代码如下,现在问题是如果刷新页面过快或者几个人同时打开就出现错误说是:
“ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。” 或者是
“打开的与此命令相关联的 DataReader,必须首先将它关闭”
求,如果用using在哪一块用啊

 public static class DBHelper
{
private static OleDbConnection connection;
public static OleDbConnection Connection
{
get
{
string connString = ConfigurationManager.ConnectionStrings["strConn"].ToString();
if (connection == null)
{
connection = new OleDbConnection(connString);
connection.Open();
}
else if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}

public static int ExecuteCommand(string safeOleDb)
{
OleDbCommand cmd = new OleDbCommand(safeOleDb, Connection);
int result = cmd.ExecuteNonQuery();
return result;
}

public static int ExecuteCommand(string OleDb, OleDbParameter[] values)
{
OleDbCommand cmd = new OleDbCommand(OleDb, Connection);
cmd.Parameters.AddRange(values);
int result = cmd.ExecuteNonQuery();
return result;
}

public static int GetScalar(string safeOleDb)
{
OleDbCommand cmd = new OleDbCommand(safeOleDb, Connection);
int result = cmd.ExecuteNonQuery();
return result;
}

public static int GetScalar(string OleDb, OleDbParameter[] values)
{
OleDbCommand cmd = new OleDbCommand(OleDb, Connection);
cmd.Parameters.AddRange(values);
int result = cmd.ExecuteNonQuery();
return result;
}

public static OleDbDataReader GetReader(string safeOleDb)
{
OleDbCommand cmd = new OleDbCommand(safeOleDb, Connection);
OleDbDataReader reader = cmd.ExecuteReader();
return reader;
}

public static OleDbDataReader GetReader(string OleDb, OleDbParameter value)
{
OleDbCommand cmd = new OleDbCommand(OleDb, Connection);
cmd.Parameters.Add(value);
OleDbDataReader reader = cmd.ExecuteReader();
return reader;
}

public static OleDbDataReader GetReader(string OleDb, OleDbParameter[] values)
{
OleDbCommand cmd = new OleDbCommand(OleDb, Connection);
cmd.Parameters.AddRange(values);
OleDbDataReader reader = cmd.ExecuteReader();
return reader;
}

public static DataTable GetDataSet(string safeOleDb)
{
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand(safeOleDb, Connection);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(ds);
return ds.Tables[0];
}

public static DataTable GetDataSet(string safeOleDb, OleDbParameter value)
{
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand(safeOleDb, Connection);
cmd.Parameters.Add(value);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(ds);
return ds.Tables[0];
}
public static DataTable GetDataSet(string safeOleDb, OleDbParameter[] values)
{
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand(safeOleDb, Connection);
cmd.Parameters.AddRange(values);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(ds);
return ds.Tables[0];
}
}
...全文
194 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
IndexRegisterLogin 2010-11-17
  • 打赏
  • 举报
回复
我用的mvc三层架构,如果我把这个类不弄成static静态的,其他层就不能调用了(其他层是静态类的),还必须要实例化这个类,岂不是更麻烦吗?
likevs 2010-11-05
  • 打赏
  • 举报
回复
天啊,楼主,你的数据库链接只打开而没有进行一次关闭,并且操作类是静态的,你强呀!服务器没让你的代码弄惨已算不错了。

我只以其中一个事件代码为例,其它的以此为参考:

public static int ExecuteCommand(string safeOleDb)
{
int result =0;//这里设为0,你在调用该函数处判断该值是否大于0,如果大于0就证明执行成功
using(Connection)//这里在使用前标注好它,你还可以using一些占用内存多的对象,如DataSet,DataTable等
{
OleDbCommand cmd = new OleDbCommand(safeOleDb, Connection);
result = cmd.ExecuteNonQuery();
}
return result;
}

种草德鲁伊 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 salon122 的回复:]

在每个方法后面加上关闭代码 如:conn.close()...
[/Quote]

关闭了连接,DataReader就不能用了。
tsmoon2009 2010-11-05
  • 打赏
  • 举报
回复
salon122 2010-11-05
  • 打赏
  • 举报
回复
在每个方法后面加上关闭代码 如:conn.close()...
BIRD72sky 2010-11-05
  • 打赏
  • 举报
回复
cmd.ExecuteReader(); 改成:cmd.ExecuteReader(CommandBehavior.CloseConnection)
种草德鲁伊 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fanvins 的回复:]

此句有问题
OleDbDataReader reader = cmd.ExecuteReader();

应该为
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
意思是使用完后马上关闭连接
具体可以看:
http://blog.csdn.net/tyq0901/archive/……
[/Quote]

支持
fb13579 2010-11-05
  • 打赏
  • 举报
回复
请不要用static 大家共享一个。肯定会出错。
这个类最好。不要用static 的。 很重要的类。
static 多人使用全乱了。
SK_Aqi 2010-11-04
  • 打赏
  • 举报
回复
就是每个方法后面及时加上关闭的代码就行了
如: conn.Close(); myReader.Close();等
IndexRegisterLogin 2010-11-04
  • 打赏
  • 举报
回复
分不够我再加,拜托了,很急的
hookyzlr 2010-11-04
  • 打赏
  • 举报
回复
你把代开链接的代码放在索引器中,不好用using
手动关闭吧。
IndexRegisterLogin 2010-11-04
  • 打赏
  • 举报
回复
在哪边加?我小菜,救命啊,拜托在我代码上加上红色的关闭代码,谢谢
SK_Aqi 2010-11-04
  • 打赏
  • 举报
回复
缺少关闭
cmd.Close();
connection.Close();
connection.Dispose();
及时加上
M4A1007 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fanvins 的回复:]
此句有问题
OleDbDataReader reader = cmd.ExecuteReader();

应该为
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
意思是使用完后马上关闭连接
具体可以看:
http://blog.csdn.net/tyq0901/archive/2……
[/Quote]


顶~
phil999 2010-11-04
  • 打赏
  • 举报
回复
不要把 OleDbConnection 弄成 static,用这种办法节省资源是想当然,除了增加错误没有好处
boykiller007 2010-11-04
  • 打赏
  • 举报
回复
用using (sqldatareader reader= com.ExecuteReader ) 不是很好嘛
fanvins 2010-11-04
  • 打赏
  • 举报
回复
同时,前台调用最好用using
fanvins 2010-11-04
  • 打赏
  • 举报
回复
此句有问题
OleDbDataReader reader = cmd.ExecuteReader();

应该为
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
意思是使用完后马上关闭连接
具体可以看:
http://blog.csdn.net/tyq0901/archive/2010/09/02/5859372.aspx
IndexRegisterLogin 2010-11-04
  • 打赏
  • 举报
回复
冒泡。。。。

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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