将压缩的csv文件上传到mysql以附加到表

时间:2014-05-07 07:26:29

标签: mysql .net

如何将压缩的csv文件上传到远程mysql实例以附加到表中?

假设csv文件中的字段对应于表列。文件中的第一行是标题行。

我应该在我的.net解决方案中添加什么nuget包(如果有的话)?

连接数据库并将压缩文件发送给它需要什么代码?

具体而言,这是在AWS EC2上运行的代码,该文件将文件发送到AWS RDS中的MYSQL数据库。

1 个答案:

答案 0 :(得分:1)

您可以使用MySQL .NET connector和MySQL语句加载数据。

如果您在机器托管数据库上只有SQL访问权限,则可以使用:

MySqlConnection conn = new MySqlConnection("server=server;uid=username;pwd=xxx;database=db"); 

  try
  {
    conn.Open();
  }
  catch (MySqlException e)
  {
    Console.WriteLine("Error connecting to sql server");
  }

  // maybe add transaction, to be sure everything is done      
  MySqlTransaction transaction =  conn.BeginTransaction();

  // read csv line by line
  // I use this csv parser http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader 
  using (CsvReader csv = new CsvReader(new StreamReader("data.csv"), true))
  {
    while (csv.ReadNextRecord())
    {   
      try
      { 
        MySqlCommand cmd = new MySqlCommand("insert into table ()", conn);
        int affected_rows = cmd.ExecuteNonQuery();
      }
      catch (Exception e)
      {
         transaction.Rollback();
         Console.WriteLine("Error: " + e.Message);
         break;
      }
    }
  }

  transaction.Commit();
  conn.close();

如果你可以在远程机器上做一些web服务,我建议使用MySQL load data infile语法。它非常快。

LOAD DATA INFILE 'csv.txt' INTO TABLE rates IGNORE 1 LINES
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' STARTING BY ''

我想在将数据插入表之前必须解压缩csv文件。您可以使用nuget安装MySQL .NET连接器:

PM> Install-Package MySql.Data -Version 6.8.3