2011-09-27 23 views
1
public List<int> GetCounts(string connectionstring) 
    { 
     List<int> results = new List<int>(); 
     string sqlStmt = "SELECT DISTINCT COUNT(Grouping) from Attendance"; 

     using (SqlConnection conn = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true")) 
     using (SqlCommand cmd = new SqlCommand(conn,sqlStmt)) 
     { 
      conn.Open(); 
      using (SqlDataReader rdr = cmd.ExecuteReader()) 
      { 
       while (rdr.Read()) 
       { 
        int count = rdr.GetInt32(0); 

        results.Add(count); 
       } 
       rdr.Close(); 
      } 
      conn.Close(); 
     } 
     return results; 
    } 

目前我有这个代码,我想数组是灵活的,这意味着如果我有超过两个项目在数据库中的数组将自动更新。上面的sql语句将检索我想放在上面的数组中的项目。如果sql语句结果有超过2个项目,我希望数组自动更新。如何使数组变得灵活?

+6

使用'列表'而不是....阵列在任何时间点具有给定的固定长度... –

+0

@marc_s更新了这个问题,可以请给我一些代码给我跟随? – Mark20

+0

建议保持不变 - 使用'List '而不是您可以放入的条目数量。 –

回答

0

使用FieldCountSqlDataReader的属性来创建一个数组。您还可以使用SqlDataReader.GetValues(object[])方法填充当前行中具有列值的对象数组。

希望它可以帮助你。

1

如果你想从数据库中检索任意数量的项目,我会建议通过数组构建List<T>

试试这个:

public List<int> GetCounts(string connectionString) 
{ 
    List<int> results = new List<int>(); 

    string sqlStmt = "SELECT DISTINCT COUNT(Grouping) from Attendance"; 

    using(SqlConnection conn = new SqlConnection(connectionString)) 
    using(SqlCommand cmd = new SqlCommand(sqlStmt, conn)) 
    { 
     conn.Open(); 

     using(SqlDataReader rdr = cmd.ExecuteReader()) 
     { 
      while(rdr.Read()) 
      { 
       int count = rdr.GetInt32(0); // read item no. 0 from the reader, as INT 

       results.Add(count); 
      } 

      rdr.Close(); 
     } 

     conn.Close(); 
    } 

    return results; 
} 

,然后你可以调用这个方法是这样的:

string connStr = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;"; 

List<int> counts = GetCounts(connStr); 

,你拿回所有的罪名清单 - 多达有 - 没有脏阵列黑客或任何必要的!

List<T>构造也非常灵活 - 您可以有一个List<string>或任何.NET类型的列表,真的 - 您可以构建自己的类型(例如,由十个属性组成的类),然后列出那个类的类型。泛型很酷! :-)

+0

谢谢!我编辑了代码,现在我在使用时出现错误(SqlCommand cmd = new SqlCommand(conn,sqlStmt)),说它有一些无效参数,并且它不能从字符串转换为System.Data.SqlClient.SqlConnection =/ – Mark20

+0

@ Mark20:哦,对不起 - 我混淆了两个参数 - 'SqlStmt'(字符串)必须先出现,'conn'(SqlConnection)最后 –

+0

是的,非常感谢!它现在有效,谢谢Marc :) – Mark20