我有一个用于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();
}
答案 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中的DataSet
或List<>
个自定义实体,并将其返回到您的网页,然后尽早释放宝贵的数据库资源。