2012-01-24 19 views
31

Sto recuperando i dati da una tabella SQL in modo da poter visualizzare il risultato sulla pagina come tabella HTML. Più tardi ho bisogno di essere in grado di salvare quella tabella come un file CSV.Come convertire DataSet in DataTable

Finora ho capito come recuperare i dati e li compilare un set di dati per scopi di visualizzazione (che è perfettamente funzionante) ...

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

e come salvarli in un file CSV con l'aiuto di codice seguente da: 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(); 
    } 

Ora il mio problema è come faccio a convertire questo DataSet a DataTable? Ho cercato il modo qui descritto con NO fortuna: http://www.ezineasp.net/post/ASP-Net-C-sharp-Convert-DataSet-to-DataTable.aspx

Qualcuno mi può aiutare?

risposta

87

A DataSet già contieneDataTables. Si può semplicemente utilizzare:

DataTable firstTable = dataSet.Tables[0]; 

o per nome:

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

nota che si dovrebbe avere using dichiarazioni per il codice SQL, al fine di garantire il collegamento è disposto correttamente:

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

Grazie per le risposte veloci! Ho già provato questo: mySqlAdapter.Fill (myDataSet); DataTable myDataTable = myDataSet.Tables [0]; ma il file CSV non sembra corretto in quanto i valori sono mancanti e sostituito con "System.Data.DataRow" .... Nome, 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, come risolvere il problema? – AlwaysANovice

+1

@Walahh: Bene, il tuo codice CSV chiama 'ToString()' su 'DataRow', che mi sembra una cattiva idea. Ti suggerisco di chiederlo come una domanda a parte, poiché in realtà non è la stessa della domanda che hai posto. –

+0

@ JonSkeet - Ricevo un DataSet da SSIS. Eseguo una query del server SQL con connessione ADO.NET. Il set di risultati è memorizzato in un DataSet. C'è un modo per definire il mio set di risultati in modo tale che DataTable abbia anche lo stesso nome? Altrimenti, posso usare l'indice. – Steam

4

DataSet è la raccolta di DataTables .... è possibile ottenere il datatable da DataSet come di seguito.

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

Ecco la mia soluzione:

DataTable datatable = (DataTable)dataset.datatablename; 
Problemi correlati