【发布时间】:2020-06-08 17:25:01
【问题描述】:
我正在使用SqlDataReader 从存储过程中获取数据。即使正在获取记录,while (reader.Read()) 也只会执行一次,因此在我的列表中只添加了一行。
List<Student> tablelist = new List<Student>();
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand("SP_ReadPromotedStudents"))
{
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = Data[0];
cmd.Parameters.Add("@Email", SqlDbType.VarChar).Value = Data[1];
cmd.Parameters.Add("@Class", SqlDbType.VarChar).Value = Data[2];
con.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.HasRows)
{
while (reader.Read())
{
tablelist.Add(new Student
{
Name = (string)(reader[0]),
Email = (string)(reader[1]),
Class = (string)(reader[2]),
});
reader.NextResult();
}
}
}
}
}
return tablelist;
我的Student班级:
public class Student
{
public string Name { get; set; }
public string Email { get; set; }
public string Class { get; set; }
}
我获取了大约 46 条记录。但是在列表中只添加了一条记录。这里有什么错误?
【问题讨论】:
-
你为什么使用 NextResult ?
-
NextResult()移动到下一个结果集,而不是下一行。把它拿出来。 -
如果没有 NextResult(),它将进入无限 while 循环。它卡在 while (reader.Read())
-
你不应该在阅读器 HasRows 时循环,你应该使用
if而不是while。
标签: c# sql-server sqldatareader datareader