从数据库查询列并绑定它

本文关键字:绑定 数据库 查询 | 更新日期: 2023-09-27 18:15:17

con.Open();
SqlCommand com,com2;
string str5 = "SELECT count(Name) as count from [Committee].[dbo].[Supervisor] ;";
com2 = new SqlCommand(str5, con);
SqlDataReader reader4 = com2.ExecuteReader();
int count= 0;
if (reader4.Read())
{
    string s = reader4["count"].ToString();
    count = int.Parse(s.Trim());
    reader4.Close();
    con.Close();
 }
 con.Open();
 string str = "SELECT Name from [Committee].[dbo].[Supervisor] ;";
 com = new SqlCommand(str, con);
 SqlDataReader reader = com.ExecuteReader();
 string  [] list;
 list = new string [count] ;
 if (reader.Read())
 {
     for (int i = 0; i < count; i++)
     {
         list[i] = reader["Name"].ToString(); // so here I got the problem
     }
     reader.Close();
     con.Close();
 }
 DropDownList1.DataSource = list;
 DropDownList1.DataBind();

大家好,我有这段代码,我正在从数据库中检索"名称"列,我想将其绑定到 DropdownList1 中。它有效,但是,我从列中获得了唯一的第一行。问题是如何将其逐行保存在数组中并正确绑定?

从数据库查询列并绑定它

每次

调用SqlDataReader.Read时,它都会将记录推进到下一行,但是您只调用它一次,这意味着每次访问reader["Name"]时,您都会获得第一行。与其做一个if/for不如在while中调用它:

var list = new List<string>();
while(reader.Read())
{
    list.Add(reader["Name"].ToString());
}

如果您使用List<string>而不是如上所示的数组,也可能更容易。

试试这个:

List<string> list = new List<string>();
while (reader.Read())
{
    list.Add(reader["Name"].ToString());
}
reader.Close(); 
con.Close();

这样,您就不需要计数查询,因为只要有行要返回,读取器就会执行。

ps:如果你以某种方式需要一个数组,你可以使用 list.ToArray() 方法。

问题是你应该使用 while 来表示reader而不是If

    int i=0;
    while(reader.Read())
     {
         list[i] = reader["Name"].ToString(); 
         i++;
     }
     reader.Close();
     con.Close();