2013-02-17 1 views
1

adapter.fill 기술을 사용하지 않는 Datatable을 반환하고자합니다.adapter.fill을 사용하지 않고 데이터베이스 테이블에서 데이터 테이블을 반환하는 방법

internal DataTable ConnectedSelect(string TableName, string[] Cols, string Condition) 
    { 
     DataTable dt = new DataTable(); 
     using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)) 
     { 
      con.Open(); 
      using (SqlCommand cmd = new SqlCommand(GenerateSelectStatment(TableName, Cols, Condition),con)) 
      { 
       SqlDataReader rdr = cmd.ExecuteReader(); 
       object[] temp = new object[rdr.FieldCount]; 
       while (rdr.Read()) 
       { 
        rdr.GetValues(temp); 
        dt.Rows.Add(temp); 
       } 
      } 
     } 
     return dt; 
    } 
    } 

문제가 발생합니다. 입력 배열이이 표에서 col 수보다 깁니다. 테이블에 4 개의 열이 있습니다. 무엇이 문제입니까? rows.add는 입력과 동일한 4 개의 요소가있는 행을 추가해야합니다.

답변

2

당신은 잘

internal DataTable ConnectedSelect(string TableName, string[] Cols, string Condition) 
{ 
    DataTable dt = new DataTable(); 
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)) 
    { 
     con.Open(); 
     using (SqlCommand cmd = new SqlCommand(GenerateSelectStatment(TableName, Cols, Condition),con)) 
     { 
      SqlDataReader rdr = cmd.ExecuteReader(); 
      if(rdr.HasRows) 
       dt.Load(rdr); 
     } 
    } 
    return dt; 
} 
} 
+0

달콤한 작품 : 것 DataTable

dt.Load(rdr); 

전체 코드의 load 방법을 사용하지만 어떻게 코드에서 루프가없는 올 수 있습니까? – AngelicCore

+1

dt.Load (rdr)는 모든 판독기 값을 DataTable에 삽입합니다. 이 경우 루프가 필요하지 않습니다. –

+0

그러나 한 번에 한 행만 반환하는 리더는 없습니까? dt.load가 모든 행을 반환하도록 강요합니까? – AngelicCore

관련 문제