阅读器关闭时尝试调用 Read 无效。急!

dys_198102 2009-04-19 11:57:47
数据库类,
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.Text.RegularExpressions;
using System.Data.OleDb;
//using System.Data.SqlClient;

/// <summary>
///WebData 的摘要说明
/// </summary>
public class WebData
{

public WebData()
{
//
//TODO: 在此处添加构造函数逻辑
//
}


/// <summary>
/// 执行Sql查询语句
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string sqlstr)
{
using(OleDbConnection conn=new OleDbConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["webtest"].ConnectionString))
{
using (OleDbCommand cmd = new OleDbCommand(sqlstr, conn))
{
try
{
conn.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.OleDb.OleDbException e)
{
conn.Close();
throw e;
}
finally
{
cmd.Dispose();
conn.Close();
}
}
}
}


/// <summary>
/// 执行Sql更新语句
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <returns>布尔值</returns>
public static int ExecuteUpdate(string sqlstr)
{
using(OleDbConnection conn=new OleDbConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["webtest"].ConnectionString))
{
using (OleDbCommand cmd = new OleDbCommand(sqlstr, conn))
{
try
{
conn.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.OleDb.OleDbException e)
{
conn.Close();
throw e;
}
finally
{
cmd.Dispose();
conn.Close();
}
}
}

}



/// <summary>
/// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
/// 方法关闭数据库连接
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <returns>SqlDataReader对象</returns>
public static OleDbDataReader dataReader(string sqlstr)
{
OleDbDataReader dr=null;

OleDbConnection conn = new OleDbConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["webtest"].ConnectionString);
OleDbCommand cmd = new OleDbCommand(sqlstr, conn);

try
{
conn.Open();
dr = cmd.ExecuteReader();
return dr;
}
catch (System.Data.OleDb.OleDbException e)
{
conn.Close();
throw e;
}
finally
{

cmd.Dispose();
conn.Close();
}


}



///<summary>
///关闭datareader
///传入SqlDataReader的ref
///</summary>
//public static void closeDataReader(ref OleDbDataReader dr)
//{
// try
// {
// dr.Close();
// dr.Dispose();
// }
// catch (System.Data.OleDb.OleDbException e)
// {
// dr.Close();
// dr.Dispose();
// }
//}
后台代码:
[AjaxPro.AjaxMethod]
public string returns(string s1,string s2,string s3)
{

string ma = Session["CheckCode"].ToString().ToLower();
string EnPswdStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s2, "MD5");

string sqls = "SELECT User_name, User_PassWord FROM Hover_Admin WHERE User_name = '" + s1 + "' AND User_PassWord = '" + EnPswdStr.Trim() + "'";

OleDbDataReader red = WebData.dataReader(sqls);

if (red.Read())
{
if (s3.ToLower() != ma)
{
return s3 = "dd";
}
mycookie.SaveCookie("UserName", s1, 2);
mycookie.SaveCookieC("Online", "True|" + s1, 2);
return s1 = "true";
//return s1 = red["User_name"].ToString();

//red.Close();
//red.Dispose();
//WebData.closeDataReader(ref red);

}
else
{
return s2 = "false";
}

}
阅读器关闭时尝试调用 Read 无效
...全文
3638 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
JayDa214 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
try
{
conn.Open();
dr = cmd.ExecuteReader();
return dr;
}

楼主,你仔细看看什么是DataReader吧
DataReader相当于一个只能向前的读取器,在读取的时候你不能conn.close()
因此,一般的做法是返回一个IList
[/Quote]
去掉conn.Open();
junshanhudazhaxi 2010-04-19
  • 打赏
  • 举报
回复
还有可能是数据库服务器出问题了
bagegejin 2009-04-20
  • 打赏
  • 举报
回复
try
{
conn.Open();
dr = cmd.ExecuteReader();
return dr;
}

楼主,你仔细看看什么是DataReader吧
DataReader相当于一个只能向前的读取器,在读取的时候你不能conn.close()
因此,一般的做法是返回一个IList
feifeiyiwen 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mingmingsuper 的回复:]
数据库关闭了两次,而且在您没有读取数据的时候你已经关闭了数据库连接,那你怎么去读取数据,我看你还是把读出的数据放在list里边吧
[/Quote]
up
wfcfan 2009-04-20
  • 打赏
  • 举报
回复
public static OleDbDataReader dataReader(string sqlstr) 
{
OleDbDataReader dr=null;

OleDbConnection conn = new OleDbConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["webtest"].ConnectionString);
OleDbCommand cmd = new OleDbCommand(sqlstr, conn);

try
{
conn.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
catch
{
if (dr != null)
{
dr.Close();
}
throw;
}


}
qiaojia596 2009-04-20
  • 打赏
  • 举报
回复
这个问题我也碰到过,不过前辈们都告诉你解决方法了呵呵。我表示感同身受。
walkghost 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhgroup 的回复:]
数据连接要在reader读取完后再关闭
[/Quote]
UP!
xierfly 2009-04-20
  • 打赏
  • 举报
回复
路过……
皓月明 2009-04-20
  • 打赏
  • 举报
回复
数据库关闭了两次,而且在您没有读取数据的时候你已经关闭了数据库连接,那你怎么去读取数据,我看你还是把读出的数据放在list里边吧
zhgroup 2009-04-20
  • 打赏
  • 举报
回复
数据连接要在reader读取完后再关闭
sujunjun 2009-04-20
  • 打赏
  • 举报
回复
你必須弄清楚:reader是只讀的,而且只向前。如果已經關閉就必須打開,如果關閉再執行關閉就會錯誤
只要打開了reader就必須關閉,否則打開conn連接也會報錯。
takako_mu 2009-04-20
  • 打赏
  • 举报
回复
關了兩次。
云想慕尘 2009-04-20
  • 打赏
  • 举报
回复
reader完毕后再close()
zsuswy 2009-04-20
  • 打赏
  • 举报
回复
返回的时候,reader已经被你Close()了

62,041

社区成员

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

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

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

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