2010-10-03 30 views
1

我想從mysql數據庫中將表格導出到txt或csv文件,就像您在phpmyadmin中所做的那樣。我目前使用下面的代碼,但在程序運行幾個小時後,它會拋出「嘗試讀取流過」錯誤。如何使用C#從mysql數據庫導出/下載表?

MySqlConnection connection = new MySqlConnection(MyConString); 
      MySqlCommand command = connection.CreateCommand(); 
      connection.Open(); 
      command.CommandText = "SELECT * FROM mytable"; 
      MySqlDataReader result = command.ExecuteReader(); 
       if (result != null) 
        while (result.Read()) 
        { 
         string thisrow = ""; 
         for (int i = 0; i < result.FieldCount; i++) 
          thisrow += result.GetValue(i).ToString() + ","; 
         pass = Regex.Replace(thisrow, @"\W*", ""); 
         if (!hshTable.ContainsKey(pass)) hshTable.Add(pass, pass); 
        } 
      connection.Close(); 

有像myquerystring = "LOAD DATA LOCAL INFILE 'C:/mysqltable.txt' INTO TABLE mytable FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'";

,代替文件加載到數據庫它下載表格,而不是一個命令?

好,我試過

MySqlConnection connection = new MySqlConnection(MyConString); 
     MySqlCommand command = connection.CreateCommand(); 
     connection.Open(); 
      myquerystring = "SELECT * INTO OUTFILE 'E:/mysqldump.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM mytable"; 
       command.CommandText = myquerystring; 
       command.ExecuteNonQuery(); 

,但它一直給我「拒絕了用戶‘管理員’@‘MYIP’訪問(使用密碼:YES)」,其中MYIP真的是我的IP錯誤,而不是服務器即使服務器IP在MyConString中指定。

+0

您是否考慮過使用mysqldump http://dev.mysql.com/ doc/refman/5.1/en/mysqldump.html這個? – 2010-10-03 08:52:51

+0

是的,但第三方應用程序不能用於此項目。它必須通過編碼完成。有沒有一個MySQL命令我可以執行下載一個表作爲一個文件? – Jon 2010-10-03 09:00:41

回答

1

你可以試試這個:

SELECT * INTO OUTFILE 't:/mysqldump.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM mytable 

記住MySQL進程的是所有者必須有權在指定位置寫。

+0

我試過,但它不斷給我一個「訪問拒絕用戶'管理'@'myip'(使用密碼:YES)」錯誤,其中myip實際上是我的IP而不是服務器,即使服務器IP在MyConString中指定。 – Jon 2010-10-03 22:11:04

+0

請參閱http://dev.mysql.com/doc/refman/5.0/en/select.html#id4599936您必須擁有'FILE'特權。此外'E:\ mysqldump.csv'必須是服務器計算機上的有效路徑,而不是您的計算機。因此,如果您的應用程序未與MySQL數據庫運行在同一臺服務器上,並且您無法訪問服務器文件系統,那麼最好放棄這個想法。我會嘗試將查詢結果限制爲幾千行,重新建立連接並從最後一次轉儲的行繼續。 – 2010-10-25 16:31:42

0

你好幾年前使用xsl做了類似的事情。我從Web服務接收到一個xml,並將其轉換爲一個csv文件以傳遞給將數據插入到某些表中的批處理。這不完全是你的情況,但數據集提供了導出到XML的方法。記錄數可能是一個問題(填充數據表需要很長時間),您必須添加一個步驟(從數據集到xml,然後到csv)

相關問題