ASP.NET Web API - SQL - 检索信息

时间:2016-06-10 14:50:27

标签: sql asp.net-web-api

我在使用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一起工作)。

希望有人可以帮助我。我没有找到任何具体的信息,我想这应该很容易,我在这里做错了。

2 个答案:

答案 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访问列表中的各个项目。