我需要导入两个不同列的csv文件到mysql数据库表。
当我导入第二个文件时,表仍然包含第一个csv文件的数据,因此我需要一个方法或测试来更新数据(如果有差异)并添加不存在的数据。
我的代码如下所示:
方法为第一个文件导入\u bilan,为第二个文件导入\u数据。
private void Import_Bilan_Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
if (result == DialogResult.OK) // Test result.
{
string file = openFileDialog1.FileName;
string[] f = file.Split('\\');
// to get the only file name
string fn = f[(f.Length) - 1];
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string dest = path + @"\upload\" + fn;
//to copy the file to the destination folder
File.Copy(file, dest, true);
MessageBox.Show("File Uploaded !!");
//to copy the file to the destination folder
File.Copy(file, dest, true);
MySqlConnection con = new MySqlConnection("datasource=localhost;database=***;port=3306;username=root;password=root;SslMode=none;AllowUserVariables=true");
var msbl = new MySqlBulkLoader(con)
{
TableName = "**",
FieldTerminator = ";",
FileName = dest,
NumberOfLinesToSkip = 1,
};
msbl.Columns.AddRange(new[] { "***", "***""@discard", "@discard","@discard", "@discard", "@discard"});
msbl.Load();
con.Close();
MessageBox.Show("Data bind to database !!");
}
}
private void Import_Data_Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
if (result == DialogResult.OK) // Test result.
{
string file = openFileDialog1.FileName;
string[] f = file.Split('\\');
// to get the only file name
string fn = f[(f.Length) - 1];
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string dest = path + @"\upload\" + fn;
//to copy the file to the destination folder
File.Copy(file, dest, true);
MessageBox.Show("File Uploaded !!");
//to copy the file to the destination folder
File.Copy(file, dest, true);
MySqlConnection con = new MySqlConnection("datasource=localhost;database=***;port=3306;username=root;password=root;SslMode=none;AllowUserVariables=true");
var msbl = new MySqlBulkLoader(con)
{
TableName = "****",
FieldTerminator = ";",
FileName = dest,
NumberOfLinesToSkip = 1,
};
msbl.Columns.AddRange(new[] { "@discard", "***" });
msbl.Load();
con.Close();
MessageBox.Show("Data bind to database !!");
}
}
1条答案
按热度按时间qltillow1#
基于传递给的列名
msbl.Columns.AddRange
,两个输入csv文件的数据类型和列数似乎非常不同(如果不正确,请使用有关csv文件结构的信息编辑您的问题。)如果这是真的,我建议两种不同的方法之一:
在c中读取csv#
使用像csvhelper这样的库读取c#中的两个csv文件,并将数据连接在一起(例如,通过创建
Dictionary
然后将行(一次一行)插入mysql。这最终可能会变得更慢,并且可能需要更多的代码。所以,你可以…在mysql中合并表
从上面的代码开始,但是将csv文件加载到两个临时表中;我们给他们打电话吧
exercices1
以及exercices2
. (它们可以具有与相同的模式exercices
,或者如果愿意,可以为每个csv创建自定义架构。)然后执行mysql insert into语句:
显然,确切的细节将取决于csv文件的确切结构、它们包含什么数据、它们有哪些共同的列(您可以加入这些列)等等。
完成后,您可以删除将csv数据加载到的两个表。