数据库类,
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 无效

解决方案 »

  1.   

       try 
                    { 
                        conn.Open(); 
                        dr = cmd.ExecuteReader(); 
                        return dr; 
                    } 楼主,你仔细看看什么是DataReader吧
    DataReader相当于一个只能向前的读取器,在读取的时候你不能conn.close()
    因此,一般的做法是返回一个IList
      

  2.   

    返回的时候,reader已经被你Close()了
      

  3.   

    你必須弄清楚:reader是只讀的,而且只向前。如果已經關閉就必須打開,如果關閉再執行關閉就會錯誤
    只要打開了reader就必須關閉,否則打開conn連接也會報錯。
      

  4.   

    数据连接要在reader读取完后再关闭
      

  5.   

    数据库关闭了两次,而且在您没有读取数据的时候你已经关闭了数据库连接,那你怎么去读取数据,我看你还是把读出的数据放在list里边吧
      

  6.   

    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; 
                    }           
        }