如何将压缩的csv文件上传到远程mysql实例以附加到表中?
假设csv文件中的字段对应于表列。文件中的第一行是标题行。
我应该在我的.net解决方案中添加什么nuget包(如果有的话)?
连接数据库并将压缩文件发送给它需要什么代码?
具体而言,这是在AWS EC2上运行的代码,该文件将文件发送到AWS RDS中的MYSQL数据库。
答案 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