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();
大家好,我有这个代码我正在检索一个专栏&#34; Name&#34;从数据库我想在DropdownList1中绑定它。它有效,但是,我从列中获得了唯一的第一行。问题是如何逐行将其保存在数组中并正确绑定?
答案 0 :(得分:2)
每次调用SqlDataReader.Read
时,它都会将记录推送到下一行,但是您只需拨打一次,这意味着每次访问reader["Name"]
时您都会获得第一行行。我应该在if/for
:
while
var list = new List<string>();
while(reader.Read())
{
list.Add(reader["Name"].ToString());
}
如果使用List<string>
代替数组,也可能更容易,如上所示。
答案 1 :(得分:2)
试试这个:
List<string> list = new List<string>();
while (reader.Read())
{
list.Add(reader["Name"].ToString());
}
reader.Close();
con.Close();
这样您就不需要计数查询,因为读者会执行尽可能多的行返回。
ps:如果你需要一个数组,你可以使用list.ToArray()
方法。
答案 2 :(得分:1)
问题是您应该while
使用reader
代替If
int i=0;
while(reader.Read())
{
list[i] = reader["Name"].ToString();
i++;
}
reader.Close();
con.Close();