从数据库中查询列并绑定它

时间:2015-09-30 20:31:05

标签: c# sql asp.net sql-server

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中绑定它。它有效,但是,我从列中获得了唯一的第一行。问题是如何逐行将其保存在数组中并正确绑定?

3 个答案:

答案 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();
相关问题