2013-02-17 40 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; 
    } 
    } 

問題是我得到輸入數組比這個表中的列數要長。 表有4列 有什麼問題? rows.add應該添加一個包含4個與輸入相同的元素的行。

回答

2

您可以使用DataTable

dt.Load(rdr); 

整個代碼load方法是

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

甜效果很好:) 但怎會有沒有在你的代碼的循環? – AngelicCore 2013-02-17 09:06:26

+1

dt.Load(rdr)在DataTable中插入閱讀器的所有值。在這種情況下,循環不是必需的。 – 2013-02-17 09:10:30

+0

但是讀者不一次只返回一行嗎? 或dt.load強制它返回所有行? – AngelicCore 2013-02-17 09:28:54

相關問題