2012-01-24 24 views
31

SQLテーブルからデータを取得しているため、結果をページにHTMLテーブルとして表示できます。後でそのテーブルをCSVファイルとして保存する必要があります。DataSetをDataTableに変換する方法

これまでのところ、私はデータを取得し、(完璧に働いている)表示目的のためのデータセットでそれらを埋める...

 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); 

をしてしてCSVファイルに保存する方法をする方法を考え出しました次のコードの助け: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(); 
    } 

は今私の問題は、私はDataTableにこのDataSetの変換はどうすればよいのですか?私はここに記載されている方法を試してみたいいえ運:http://www.ezineasp.net/post/ASP-Net-C-sharp-Convert-DataSet-to-DataTable.aspx

誰でも助けてくれますか?

答えて

87

DataSetすでには、DataTablesを含む。あなただけ使用することができます。

DataTable firstTable = dataSet.Tables[0]; 

または名前:あなたは、接続が適切に配置されていることを確認するために、あなたのSQLコードのusing文を持っている必要があり

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

注:

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

ありがとう!私はすでにこれを試しました: mySqlAdapter.Fill(myDataSet); DataTable myDataTable = myDataSet.Tables [0]; しかし、値が欠落していると "System.Data.DataRow" に置き換えられてCSVファイルが正しく表示されません.... 名、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、 これを修正する方法? – AlwaysANovice

+1

@Walahh:あなたのCSVコードが 'DataRow'で' ToString() 'を呼び出しています。これは私にとっては悪い考えです。私は別の質問としてそれについて尋ねることをお勧めします。本当にあなたが尋ねた質問と同じではありません。 –

+0

@JonSkeet - SSISからDataSetを取得しています。 ADO.NET接続でSQLサーバークエリを実行します。結果セットはDataSetに格納されます。私の結果セットの名前を付けてDataTableも同じ名前になるようにする方法はありますか?それ以外の場合は、インデックスを使用できます。 – Steam

4

DataSetはDataTablesのコレクションです。DataSetからデータテーブルを取得するには、次のようにします。ここで

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

は、私の解決策は次のとおりです。迅速な対応のための

DataTable datatable = (DataTable)dataset.datatablename; 
関連する問題