连接已打开

xqqsm 2010-08-23 08:39:34
做了一个登录的例子,发布在iis上,偶尔会报错,“连接SqlDataReader已打开,请先关闭”,刷新下页面它就能正常登录了,请问大虾们能不能帮我分析是什么原因,
这个是web.config里面连接池的配置
<connectionStrings>
<add name="dbconn" connectionString="Data Source=.;Initial Catalog=DatabaseName;uid=sa;pwd=1;Max Pool size=100000;Min Pool Size=0;Connection Lifetime=0;packet size=32767;Connection Reset=false; async=true;" providerName="System.Data.SqlClient"/>
</connectionStrings>

这个是登录的代码:
SqlDataReader sdr = SQLHelper.ExecuteReader("CheckAdmin", para);
if (sdr.Read())
{
user = new UserInf();
user.ID = int.Parse(sdr["id"].ToString());
}
sdr.Close();
...全文
92 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hitlcyu19 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 q107770540 的回复:]

参考此种格式来书写代码
C# code

string queryString =
"SELECT OrderID, CustomerID FROM dbo.Orders;";

using (SqlConnection connection =
new SqlConnection(connectionString))
{
……
[/Quote]
对 using
xqqsm 2010-08-23
  • 打赏
  • 举报
回复
有的时候不会错,偶尔会出现这个情况
xqqsm 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 porschev 的回复:]
我也觉得问题不是出LZ帖出来的代码

应该是之前的操作留下的来打开之后未关闭
[/Quote]
没有之前的代码,这个方法就这么长
zcfzcf001 2010-08-23
  • 打赏
  • 举报
回复
支持4楼的见解
wuyq11 2010-08-23
  • 打赏
  • 举报
回复
SqlDataReader 要先关闭,再执行ExecuteNonQuery操作
dr.Read();
或using (SqlConnection cn = new SqlConnection(“”))
{
SqlCommand cmd1 = new SqlCommand("", cn);
cn.Open();
using (SqlDataReader dr1 = cmd1.ExecuteReader())
{
while (dr1.Read())
{
string sql= "";
SqlConnection conn2 = new SqlConnection("");
SqlCommand cmd2 = new SqlCommand(sql, conn2 );
cmd2.ExecuteNonQuery();
}
}

}
porschev 2010-08-23
  • 打赏
  • 举报
回复
我也觉得问题不是出LZ帖出来的代码

应该是之前的操作留下的来打开之后未关闭
xqqsm 2010-08-23
  • 打赏
  • 举报
回复
方法中的连接都检查过了,都是开完了就关的,不存在问题,因为 好几个程序都用的这个方法,别的项目一点问题都没有,就这个出问题了,不知道什么原因
baifudage 2010-08-23
  • 打赏
  • 举报
回复
4楼的说法是正解 你检查下你的程序吧。。。。。
Peter200694013 2010-08-23
  • 打赏
  • 举报
回复
在程序中找找看,是不是某个SqlDataReader忘记close了?
q107770540 2010-08-23
  • 打赏
  • 举报
回复
参考此种格式来书写代码

string queryString =
"SELECT OrderID, CustomerID FROM dbo.Orders;";

using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlCommand command =
new SqlCommand(queryString, connection);
connection.Open();

SqlDataReader reader = command.ExecuteReader();

// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}

// Call Close when done reading.
reader.Close();
}
回头是岸 2010-08-23
  • 打赏
  • 举报
回复
sdr.Close();
把这个放在finally中就可以啦
回头是岸 2010-08-23
  • 打赏
  • 举报
回复
像这种清空你最好用try_catch_finally

这样就不会出错

111,098

社区成员

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

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

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