如何使阵列灵活?

时间:2011-09-27 04:57:51

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

  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个项目,我希望自动更新数组。

2 个答案:

答案 0 :(得分: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类型的列表,实际上 - 您可以构建自己的类型(例如,由10个属性组成的类)然后有一个类类型的列表。仿制药很酷! : - )

答案 1 :(得分:0)

使用FieldCount的{​​{1}}属性创建数组。您还可以使用SqlDataReader方法使用当前行中的列值填充对象数组。

希望它对你有所帮助。