我在使用ASP.net Web API从sql数据库中检索信息时遇到了一些问题。
我尝试使用表格很好(使用gridview)但是当我尝试使用专用于存储我的特定表信息的单独类时,我收到此错误:
"指数超出范围。必须是非负数且小于集合的大小。"
这是代码:
public ActionResult Details()
{
List<Employee> employeeList = new List<Employee>();
string CS = ConfigurationManager.ConnectionStrings["EmployeeContext"].ConnectionString;
using (var myConn = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("select * from tblEmployee", myConn);
myConn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
int i = 0;
employeeList[i].PersonID = Convert.ToInt32(rdr["PersonID"]);
employeeList[i].Name = rdr["Name"].ToString();
employeeList[i].Gender = rdr["Gender"].ToString();
employeeList[i].City = rdr["City"].ToString();
employeeList[i].DepartmentID = Convert.ToInt32(rdr["DepartmentID"]);
i++;
}
return View(employeeList);
}
}
这是Employee类:
[Table("tblEmployee")]
public class Employee
{
public int PersonID { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public string City { get; set; }
public int DepartmentID { get; set; }
} }
我在任何检索信息行上都收到此错误。
该表有5列:PersonID(int PK),Name(nvarchar),Gender(nvarchar),City(nvarchar),DepartmentID(int)。
我多次检查列名称以确保我没有弄错,我仔细检查了连接字符串,这也很好(相同的代码使用表格API与gridview一起工作)。
希望有人可以帮助我。我没有找到任何具体的信息,我想这应该很容易,我在这里做错了。
答案 0 :(得分:2)
您正尝试使用索引填充List<>
对象。要填充List<>
,您需要使用.Add()
。您需要更改以下代码:
int i = 0;
employeeList[i].PersonID = Convert.ToInt32(rdr["PersonID"]);
employeeList[i].Name = rdr["Name"].ToString();
employeeList[i].Gender = rdr["Gender"].ToString();
employeeList[i].City = rdr["City"].ToString();
employeeList[i].DepartmentID = Convert.ToInt32(rdr["DepartmentID"]);
i++;
对此:
Employee emp = new Employee();
emp.PersonID = Convert.ToInt32(rdr["PersonID"]);
emp.Name = rdr["Name"].ToString();
emp.Gender = rdr["Gender"].ToString();
emp.City = rdr["City"].ToString();
emp.DepartmentID = Convert.ToInt32(rdr["DepartmentID"]);
employeeList.Add(emp);
答案 1 :(得分:1)
将新项目添加到list
时,您应该使用.Add()
。这是一个选项:
while (rdr.Read())
{
employeeList.Add(new Employee {
PersonID = Convert.ToInt32(rdr["PersonID"]),
Name = rdr["Name"].ToString(),
Gender = rdr["Gender"].ToString(),
City = rdr["City"].ToString(),
DepartmentID = Convert.ToInt32(rdr["DepartmentID"])
});
}
然后,您可以使用index
或使用foreach
访问列表中的各个项目。