2016-10-04 102 views
1

我試圖將一個MySQL表導出到一個.csv文件,但是有些東西沒有工作,我找不到它是什麼。我第一次嘗試獲得保存到一個DataTable的日期,然後使用該功能將其導出到.csv:將從mysql表中導出日期到.CSV

public void CreateCSVFile(DataTable dtDataTablesList, string strFilePath) 
    { 
     // Create the CSV file to which grid data will be exported. 
     StreamWriter sw = new StreamWriter(strFilePath, false); 
     //First we will write the headers. 
     int iColCount = dtDataTablesList.Columns.Count; 
     for (int i = 0; i < iColCount; i++) 
     { 
      sw.Write(dtDataTablesList.Columns[i]); 
      if (i < iColCount - 1) 
      { 
       sw.Write("", ""); 
      } 
     } 
     sw.Write(sw.NewLine); 

     // Now write all the rows. 
     foreach (DataRow dr in dtDataTablesList.Rows) 
     { 
      for (int i = 0; i < iColCount; i++) 
      { 
       if (!Convert.IsDBNull(dr[i])) 
       { 
        sw.Write(dr[i].ToString()); 
       } 
       if (i < iColCount - 1) 
       { 
        sw.Write("", ""); 
       } 
      } 
      sw.Write(sw.NewLine); 
     } 
     sw.Close(); 
    } 

的問題是:它停止通過sda.Fill(數據),給出了這一點:

  • 連接{MySql.Data.MySqlClient.MySqlConnection} MySql.Data.MySqlClient.MySqlConnection
  • sSql {MySql.Data.MySqlClient.MySqlCommand} MySql.Data.MySqlClient.MySqlCommand
  • SDA {MySql.Data .MySqlClient.MySqlDataAdapt呃} MySql.Data.MySqlClient.MySqlDataAdapter
  • 數據{} System.Data.DataTable

腳本:

MySqlConnection connection = CDBAccess.GetCon; 
MySqlCommand sSql = new MySqlCommand("SELECT * from mytable;", connection); 
MySqlDataAdapter sda = new MySqlDataAdapter(); 
sda.SelectCommand = sSql; 
DataTable data = new DataTable(); 
sda.Fill(data); 
String path = @"C:\Users\Public\Documents\MyDocument"; 
CreateCSVFile(data, path); 
+0

請標記您正在使用的語言。 –

+0

完成。謝謝。 – TheRealProgrammer

+0

我的第一個猜測是你的連接有問題。你能證實連接有效嗎? –

回答

0

嘗試使用此代碼:

MySqlConnection = CDBAccess.GetCon; 
string queryString = "SELECT * from mytable;"; 
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection); 
DataSet ds = new DataSet(); 
adapter.Fill(ds, "mytable"); 
DataTable data = ds.Tables[0]; 
String path = @"C:\Users\Public\Documents\MyDocument"; 
CreateCSVFile(data, path); 

然而,通常迭代你的Java代碼中的實際表是不必要的並且容易出錯。相反,你應該利用MySQL公開的SELECT ... INTO OUTFILE構造。通過這種方式,您可以讓MySQL將您的數據編組爲CSV文件。

只需執行以下從您的Java代碼原始查詢,你應該是好去:

SELECT * 
INTO OUTFILE 'C:/Users/Public/Documents/MyDocument/output.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM mytable 
+0

是的,我已經知道這個命令,但問題是這個文件應該保存在本地而不是在MySQL服務器上。這就是爲什麼我想將所有數據添加到DataTable並將其導出到.CSV。 – TheRealProgrammer

+0

使用OUTFILE然後從服務器讀取輸出文件不會更容易嗎? –

+1

很明顯,但MySQL服務器沒有權限在網絡上的其他PC上寫入文件。所有的數據需要保存在某個地方,而不是由服務器本身來記錄.exe。 – TheRealProgrammer

0

好吧,我發現了這個問題。首先,您需要使用MySqlDataAdapter填充所有內容到DataTable中。之後,您可以使用這些數據創建一個StringBuilder並使用一個函數來創建一個.CSV日期。它看起來像這樣:

MySqlDataAdapter sda = new MySqlDataAdapter(); 
        sda.SelectCommand = cmdDataBase; 

        DataTable data = new DataTable(); 
        sda.Fill(data); 
        BindingSource aSource = new BindingSource(); 
        aSource.DataSource = data; 
        dataGridView1.DataSource = aSource; 
        sda.Update(data); 
        StringBuilder sb = new StringBuilder(); 

        string[] columnNames = data.Columns.Cast<DataColumn>(). 
                 Select(column => column.ColumnName). 
                 ToArray(); 
        sb.AppendLine(string.Join(",", columnNames)); 

        foreach (DataRow row in data.Rows) 
        { 
         string[] fields = row.ItemArray.Select(field => field.ToString()). 
                 ToArray(); 
         sb.AppendLine(string.Join(",", fields)); 
        } 

        File.WriteAllText("test.csv", sb.ToString()); 

感謝您的幫助傢伙!