2011-09-27 4 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; 
    } 

現在、私はこのコードを持っています。私は配列を柔軟にする必要があります。つまり、データベースに2つ以上のアイテムがあると、配列は自動的に更新されます。上記のSQL文は、上記の配列に配置したい項目を取得します。 SQL文の結果に2つ以上の項目がある場合は、配列を自動的に更新します。アレイを柔軟にする方法は?

+6

代わりに 'List 'を使用してください....配列は任意の時点で任意の時点で一定の長さです... –

+0

@marc_sは質問を更新しました。続く? – Mark20

+0

の推奨事項はそのままです。代わりに 'List 'を使用してください。このリストには、入力できる項目の数に柔軟性があります。 –

答えて

0

FieldCountプロパティをSqlDataReaderに設定して配列を作成します。 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<string>または任意の.NETタイプのリストを持つことができます。実際には独自のタイプ(たとえば10個のプロパティからなるクラス)を作成してからそのクラスタイプ。ジェネリックはクールです! :-)

+0

ありがとう!私は、いくつかの無効な引数を持っていることを言って、それが文字列からSystem.Data.SqlClient.SqlConnection =/ – Mark20

+0

に変換することはできません(SqlCommand cmd =新しいSqlCommand(conn、sqlStmt) Mark20:ああ、申し訳ありません - 「SqlStmt」(文字列)が最初に来なければなりません。最後にconn(SqlConnection)が –

+0

ありがとう!それは今、感謝Marc :) – Mark20

関連する問題