2010-10-03 110 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)

相关问题