ExecuteReader要求已打开且可用的链接。连接的当前状态为已关闭

Greg_han 2010-01-21 04:24:12
IIS下浏览自己开发的网站,出现上述问题。在VS2008下调试没有任何问题。
错误显示如下:

ExecuteReader要求已打开且可用的链接。连接的当前状态为已关闭
源错误:
70行 : m_DBComm.CommandText = "select CMaster_Pwd from T_ClassMaster where CMaster_ID = " + userID;
71行 : SqlDataReader reader = m_DBComm.ExecuteReader();
72行 :
73行 : reader.Read();




我的程序是一个 用户登录模块,给出代码:

单例模式设计数据库,类文件如下:
public class DBAccess
{

private SqlConnection m_DBConn;
private SqlCommand m_DBComm;
private static DBAccess m_DBaccess = null;

private DBAccess()
{
m_DBConn = new SqlConnection();
m_DBComm = new SqlCommand();
if (!InitialDB())
{
// MessageBox.Show("数据库初始化失败!");

}
}

public static DBAccess GetDBInstans()
{
if (null == m_DBaccess)
{
m_DBaccess = new DBAccess();

}
return m_DBaccess;
}

public bool InitialDB()
{
m_DBConn.ConnectionString = "Initial Catalog = Educational Administration System; Data Source = localhost;Integrated Security = SSPI";

try
{
m_DBComm.Connection = m_DBConn;
m_DBConn.Open(); //打开数据库
}
catch
{
return false;
}

return true;
}

public int CheckMasterPwd(string userID, string userPwd) // 用户登录检测
{
m_DBComm.CommandText = "select CMaster_Pwd from T_ClassMaster where CMaster_ID = " + userID;
SqlDataReader reader = m_DBComm.ExecuteReader();

reader.Read();
if (false == reader.HasRows)
{

reader.Close();
return -1;

}

string pass = reader["CMaster_Pwd"].ToString().Trim();

if (pass != userPwd)
{

reader.Close();
return 1;

}
else
{

reader.Close();
return 0;

}

}
}

//前台登录Button事件:

protected void Button1_Click(object sender, EventArgs e)
{
DBAccess.GetDBInstans().CheckMasterPwd(txtID.Text, txtPwd.Text);
int aaa = DBAccess.GetDBInstans().CheckMasterPwd(txtID.Text, txtPwd.Text);
if (0 == aaa)
Response.Write("<script>alert(\"正确登录\")</script>");

else
Response.Write("<script>alert(\"输入有误\")</script>");

}

...全文
407 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Greg_han 2010-01-21
  • 打赏
  • 举报
回复
我 又添加了一个GridView控件测试, DataSet dset.Tables[0].DefaultView; 依然在vS2008下 调试通过了,在IIS下浏览 还是出错,无法找到dset.Tables[0].DefaultView; 我估计是 数据库有问题!
Valefish 2010-01-21
  • 打赏
  • 举报
回复
恶补
paul_C 2010-01-21
  • 打赏
  • 举报
回复
if (conn.State != ConnectionState.Open)
conn.Open();
newdigitime 2010-01-21
  • 打赏
  • 举报
回复
conn.open();
if (reader.Read())
{

}
wuyq11 2010-01-21
  • 打赏
  • 举报
回复
不能关闭
SqlDataReader reader = m_DBComm.ExecuteReader();
if(reader.Read())
{
if (reader["CMaster_Pwd"].ToString().Equals(userPwd))
{

}
else
{

}
}
Greg_han 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wzp144650 的回复:]
你之前访问数据库的地方也有用过DataReader 吧?应该那个你没有关闭

using(SqlDataReader reader = command.ExecuteReader())
{
  ...
}
用DATAREADER应该这么用
[/Quote]

这是第一次 用SqlDataReader!
fengyunshier 2010-01-21
  • 打赏
  • 举报
回复
加入 m_DBConn.Close();
reader.Close();

这样也不行啊


是不能关,你的就是因为关闭了所以出问题。
像LS说的,连接要一直开着。
这样其实不好,所以建议不要用ExecuteReader方法,就读到表中去还好点
wzp144650 2010-01-21
  • 打赏
  • 举报
回复
你之前访问数据库的地方也有用过DataReader 吧?应该那个你没有关闭

using(SqlDataReader reader = command.ExecuteReader())
{
...
}
用DATAREADER应该这么用
波导终结者 2010-01-21
  • 打赏
  • 举报
回复
你的con要是打开状态
Greg_han 2010-01-21
  • 打赏
  • 举报
回复
加入 m_DBConn.Close();
reader.Close();

这样也不行啊!!

fengyunshier 2010-01-21
  • 打赏
  • 举报
回复
使用ExecuteReader操作是不能关闭数据库的

62,074

社区成员

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

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

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

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