2015-02-07 58 views
0

到目前爲止,我有一個實用程序類,其中包含一個名爲「getTable」的函數,該函數使用字符串查詢並返回一個數據表。現在我試圖讓這些查詢通過excel返回。只需將數據表的內容複製到Excel即可正常工作 - 但電子表格中沒有標題行來解釋每列的內容。對DataTable進行SQL查詢以包含標題

下面是我的嘗試:

public static DataTable getTable(String sql, bool includeHeaderRow) 
    { 
     DataTable table = new DataTable(); 
     using (SqlDataAdapter adpt = new SqlDataAdapter(sql, getConn())) 
     { 
      adpt.Fill(table); 

      if (includeHeaderRow) 
      { 
       DataRow headerRow = table.NewRow(); 

       for (int i = 0; i < table.Columns.Count; i++) 
       { 
        headerRow[i] = table.Columns[i].ColumnName; 
       } 

       table.Rows.InsertAt(headerRow, 0); 
      } 
     } 
     return table; 
    } 

上述作品差不多,但是當我嘗試寫一列名(顯然是一個字符串)到數據表的非字符串列則拋出異常。

任何想法,一個簡單的方法來實現這一目標?

+0

你也可以中WriteXML:https://msdn.microsoft.com/en-us/library/system.data.dataset.writexml%28v=vs.110%29的.aspx。它也可以在Excel中打開。 – InitK 2015-02-10 18:52:02

回答

1

當然的代碼可能會出錯,因爲當你說你要分配沒有兼容的數據類型與特定數據類型的一列,在數據表列接受特定的數據類型,現在如果你嘗試change the column datatype to object通過創建表的副本(克隆它)我認爲這個問題會解決:

public static DataTable getTable(String sql, bool includeHeaderRow) 
    { 
     DataTable table = new DataTable(); 
     using (SqlDataAdapter adpt = new SqlDataAdapter(sql, getConn())) 
     { 
      adpt.Fill(table); 


      if (includeHeaderRow) 
      {  
       DataTable dt = table.Clone(); 
       for (int i = 0; i < table.Columns.Count; i++) 
       { 
        dt.Columns[i].DataType = typeof(Object); 
       } 
       foreach (DataRow row in table.Rows) 
       { 
        dt.ImportRow(row); 
       } 
       DataRow headerRow = dt.NewRow(); 
       for (int i = 0; i < table.Columns.Count; i++) 
       { 
        headerRow[i] = table.Columns[i].ColumnName; 
       } 

       dt.Rows.InsertAt(headerRow, 0); 
      } 
     } 
     return dt; 
    }