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个项目,我希望自动更新数组。
答案 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
方法使用当前行中的列值填充对象数组。
希望它对你有所帮助。