2011-09-27 5 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

'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<T> 구조는 매우 유연합니다. List<string> 또는 모든 .NET 유형의 목록을 가질 수 있습니다. 실제로는 자신의 유형 (예 : 열 개의 속성으로 구성된 클래스)을 빌드 한 다음 그 클래스 유형. 제네릭은 멋지다! :-)

+0

! 나는 코드를 편집했는데, 이제는 (SqlCommand cmd = 새로운 SqlCommand (conn, sqlStmt)) 잘못된 인수를 가지고 있고 System.Data.SqlClient.SqlConnection =/ – Mark20

+0

에 문자열을 변환 할 수 없다는 오류가있다. Mark20 : 아, 죄송합니다 - 두 매개 변수를 섞었습니다. 'SqlStmt' (문자열)이 먼저오고, conn (SqlConnection)은 –

+0

예, 정말 고마워요! 그것은 지금 작동합니다. Marc :) – Mark20

관련 문제