如何访问ASP.Net中另一个类的阅读器

时间:2013-12-13 14:05:20

标签: c# asp.net datareader

我有一个用于connectionString的DataClassLibrary,然后我在ASP页面后面也有C#代码。我希望能够在我的ASP页面中使用While(reader.read()),以便我可以获得读者返回的多个值。我该如何实现呢?我已经为我的数据类和ASP页面提供了以下代码。

数据类:

reader = DBHelper.executeQuery(dbConn, sqlString.ToString(), parameters);
        if (reader != null)
        {
            if (reader.Read())
            {
                OrderID = (int)Convert.ToInt32(reader["OrderID"]);
                CaseNum6 = (int)Convert.ToInt32(reader["CaseNum6"]);
                CaseNum9 = (int)Convert.ToInt32(reader["CaseNum9"]);
                Group = (int)Convert.ToInt32(reader["Group"]);
                Completed = (bool)reader["Completed"];
            }
            else
                throw new Exception("No record returned");
            reader.Close();
            reader.Dispose();
            dbConn.Close();
            dbConn.Dispose();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        if (dbConn != null)
        {
            try { dbConn.Close(); dbConn.Dispose(); }
            catch { }
         }
        if (reader != null)
        {
            try { reader.Close(); reader.Dispose(); }
            catch { }
        }
    }

要实施的ASP页面:

LineAData NewDataA = new LineAData();
LineAData NewDataB = new LineAData();
string connString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)
{

    NewDataA.load(1,3);
    NewDataB.load(2,3);

    L1.Text = NewDataA.CaseNum6.ToString();
    L2.Text = NewDataA.CaseNum9.ToString();
    L7.Text = NewDataA.CaseNum6.ToString();
    L8.Text = NewDataA.CaseNum9.ToString();

    L4.Text = NewDataB.CaseNum6.ToString();
    L5.Text = NewDataB.CaseNum9.ToString();
    L10.Text = NewDataB.CaseNum6.ToString();
    L11.Text = NewDataB.CaseNum9.ToString();
}

2 个答案:

答案 0 :(得分:0)

我不太了解你的问题,但据我所知。我认为你需要asp页面上读者的多个值。如果这是要求,那么你可以做的就是创建一个类,它将包含阅读器中的所有列名。

DataClassLibrary中的方法将返回List。

以下示例将帮助您:

public class User
    {
    public long nUser { get; set; }

    public string cUserID { get; set; }

    public string cName { get; set; }

    public string cPassword { get; set; }
}

 public class cUser
 {
public List<User> GetUsers()
    {
        try
        {
            SqlConnection connection = new SqlConnection(ConnectionString);

            command = new SqlCommand(connection);
            command.CommandType = CommandType.Text;

            List<User> tuserList = new List<User>();

            User tuser = null;

            connection.Open();

            reader = command.ExecuteReader();

            while (reader.Read())
            {
                tuser = new User();

                tuser.nUser = long.Parse(reader["nUser"].ToString());
                tuser.cUserID = reader["cUserID"].ToString();
                tuser.cName = reader["cName"].ToString();
                tuser.cPassword = reader["cPassword"].ToString();

                tuserList.Add(tuser);
            }

            return tuserList;

        }

        catch (SqlException ex)
        {
            return null;
        }

        catch (Exception ex)
        {
            return null;
        }

        finally
        {
            if (reader != null)
            {
                reader.Close();
            }

            if (connection != null)
            {
                connection.Close();
            }
        }

    }
  }

在ASPX页面上:

只需创建此方法所在的类的对象。得到它。假设它在cUser类中。

    cUser a = new cUser();

    var list = a.GetUsers();

我希望它会对你有所帮助.. :)

答案 1 :(得分:0)

通过对DBHelper的一些调整,您可以将读者从您的数据(访问)类返回到您的网页代码隐藏,但是,您需要在将其返回到网络时保持打开状态后面的页面代码,而是使用选项CommandBehavior.CloseConnection执行阅读器,当页面关闭阅读器时将关闭连接。

道尔顿

public IDataReader ExecuteReaderMethod()
{
   // Set up conn and command 
   // ...
   return command.ExecuteReader(CommandBehavior.CloseConnection);
}

ASP代码背后

using (var reader = MyDal.ExecuteReaderMethod())
{
   while (reader.Read())
   {
       someUIControl.Text = reader.GetString("OrderID");
   }
}

老实说,既然看起来你需要渲染整个页面,那么获得读者懒惰评价的好处可能没什么意义。您可能最好将结果转换为DAL中的DataSetList<>个自定义实体,并将其返回到您的网页,然后尽早释放宝贵的数据库资源。