2012-01-24 65 views
31

Tôi đang lấy dữ liệu từ một bảng SQL để tôi có thể hiển thị kết quả trên trang dưới dạng bảng HTML. Sau đó, tôi cần có thể lưu bảng đó dưới dạng tệp CSV.Cách chuyển đổi DataSet thành DataTable

Cho đến nay tôi đã tìm ra cách để lấy dữ liệu và điền chúng trong một tập dữ liệu cho mục đích trưng bày (được làm việc một cách hoàn hảo) ...

 string selectQuery = "SELECT Name, ProductNumber, ListPrice FROM Poduction.Product"; 

     // Establish the connection to the SQL database 
     SqlConnection conn = ConnectionManager.GetConnection(); 
     conn.Open(); 

     // Connect to the SQL database using the above query to get all the data from table. 
     SqlDataAdapter myCommand = new SqlDataAdapter(selectQuery, conn); 

     // Create and fill a DataSet. 
     DataSet ds = new DataSet(); 
     myCommand.Fill(ds); 

và làm thế nào để lưu chúng trong một tập tin CSV với sự giúp đỡ của sau mã từ: http://www.evontech.com/login/topic/1983.html

private void exportDataTableToCsv(DataTable formattedDataTable, string filename) 
    { 
     DataTable toExcel = formattedDataTable.Copy(); 
     HttpContext context = HttpContext.Current; 
     context.Response.Clear(); 

     foreach (DataColumn column in toExcel.Columns) 
     { 
      context.Response.Write(column.ColumnName + ","); 
     } 

     context.Response.Write(Environment.NewLine); 
     foreach (DataRow row in toExcel.Rows) 
     { 
      for (int i = 0; i < toExcel.Columns.Count; i++) 
      { 
      context.Response.Write(row.ToString().Replace(",", string.Empty) + ","); 
      } 

      context.Response.Write(Environment.NewLine); 
     } 

     context.Response.ContentType = "text/csv"; 
     context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ".csv"); 
     context.Response.End(); 
    } 

Bây giờ vấn đề của tôi là làm thế nào để tôi chuyển đổi này DataSet để DataTable? Tôi đã thử cách được mô tả ở đây với NO may mắn: http://www.ezineasp.net/post/ASP-Net-C-sharp-Convert-DataSet-to-DataTable.aspx

Bất kỳ ai có thể giúp tôi không?

Trả lời

87

A DataSet đã chứaDataTables. Bạn chỉ có thể sử dụng:

DataTable firstTable = dataSet.Tables[0]; 

hoặc theo tên:

DataTable customerTable = dataSet.Tables["Customer"]; 

Lưu ý rằng bạn nên có using báo cáo cho mã SQL của bạn, để đảm bảo kết nối được xử lý đúng cách:

using (SqlConnection conn = ...) 
{ 
    // Code here... 
} 
+1

Cảm ơn đã phản ứng nhanh chóng! Tôi đã thử điều này: mySqlAdapter.Fill (myDataSet); DataTable myDataTable = myDataSet.Tables [0]; nhưng tệp CSV không chính xác vì các giá trị bị thiếu và được thay thế bằng "System.Data.DataRow" .... Tên, ProductNumber, ListPrice, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow, System.Data.DataRow , System.Data.DataRow, System.Data.DataRow, cách sửa lỗi này? – AlwaysANovice

+1

@Walahh: Tốt mã CSV của bạn đang gọi 'ToString()' trên 'DataRow', trông giống như một ý tưởng tồi với tôi. Tôi đề nghị bạn hỏi về nó như một câu hỏi riêng biệt, vì nó thực sự không giống như câu hỏi bạn đã hỏi. –

+0

@JonSkeet - Tôi đang nhận được một Số liệu từ SSIS. Tôi thực hiện một truy vấn máy chủ SQL với kết nối ADO.NET. Tập kết quả được lưu trữ trong một DataSet. Có cách nào tôi có thể đặt tên kết quả của tôi thiết lập như vậy mà DataTable cho nó cũng được cùng tên? Nếu không, tôi có thể sử dụng chỉ mục. – Steam

4

DataSet là tập hợp DataTables .... bạn có thể lấy dữ liệu từ DataSet như dưới đây.

//here ds is dataset 
DatTable dt = ds.Table[0]; /// table of dataset 
1

Đây là giải pháp của tôi:

DataTable datatable = (DataTable)dataset.datatablename; 
Các vấn đề liên quan