从数据库查询列并绑定它
本文关键字:绑定 数据库 查询 | 更新日期: 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();