使用 c# 将具有大量列标题的 Excel 文件导入 mysql
本文关键字:标题 Excel 文件 mysql 导入 使用 | 更新日期: 2023-09-27 18:33:30
我只是想知道,如何使用 C# 将大型 Excel 文件导入 MySQL?我的编码经验不是很好,我希望是否有人可以给我一些粗略的想法来开始它。到目前为止,我能够使用以下代码将 excel 文件加载到 datagridview 中:
string PathConn = " Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + pathTextBox.Text + ";Extended Properties ='"Excel 8.0;HDR=Yes;'";";
OleDbConnection conn = new OleDbConnection(PathConn);
conn.Open();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + loadTextBox.Text + "$]", conn);
table = new DataTable();
myDataAdapter.Fill(table);
但是在那之后,我不知道如何提取信息并将其保存到MySQL数据库中。假设我之前创建了一个空方案,我该如何将 excel 文件上传到 mysql?谢谢。
您需要遍历数据表中的项目并对它们执行一些操作(可能是对数据库的插入语句(
这样
foreach(DataRow dr in table.Rows)
{
string s = dr[0].ToString() // this will be the first column in the datatabl as they are zero indexed
}
在从一个SQL Server到另一个SQL Server或DataFiles 到SQL的数据迁移方案中所做的:
- 在目标 SQL Server 上创建新表(列名、主键等(
- 将现有数据加载到数据表中(这是您已经执行的操作(
- 现在,使用 DataAdapter 将新表查询到另一个数据表中(与使用 excel 文件所做的相同,只是您现在查询 SQL 表。
- 使用 DataTable 方法 "Load((" 将 OldData 从 'table' 加载到 'newTable' 中
string PathConn = (MYSQL Connection String goes here)
OleDbConnection conn = new OleDbConnection(PathConn);
conn.Open();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + loadTextBox.Text + "$]", conn);
newTable = new DataTable();
myDataAdapter.Fill(newTable);
Now use the Load() Method on the new table:
newTable.Load(table.CreateDataReader(), <Specify LoadOption here>)
匹配的列将导入到新的数据表中。(您可以通过在选择语句中使用别名来确保映射(
将现有数据加载到新表中后,您将能够使用数据适配器将更改写回数据库。
写回数据的示例:ConnString - 数据库的连接字符串,SelectStmt(可以像之前在空表上使用的一样使用(,并将新表作为dtToWrite提供
public static void writeDataTableToServer(string ConnString, string selectStmt, DataTable dtToWrite)
{
using (OdbcConnection odbcConn = new OdbcConnection(ConnString))
{
odbcConn.Open();
using (OdbcTransaction trans = odbcConn.BeginTransaction())
{
using (OdbcDataAdapter daTmp = new OdbcDataAdapter(selectStmt, ConnString))
{
using (OdbcCommandBuilder cb = new OdbcCommandBuilder(daTmp))
{
try
{
cb.ConflictOption = ConflictOption.OverwriteChanges;
daTmp.UpdateBatchSize = 5000;
daTmp.SelectCommand.Transaction = trans;
daTmp.SelectCommand.CommandTimeout = 120;
daTmp.InsertCommand = cb.GetInsertCommand();
daTmp.InsertCommand.Transaction = trans;
daTmp.InsertCommand.CommandTimeout = 120;
daTmp.UpdateCommand = cb.GetUpdateCommand();
daTmp.UpdateCommand.Transaction = trans;
daTmp.UpdateCommand.CommandTimeout = 120;
daTmp.DeleteCommand = cb.GetDeleteCommand();
daTmp.DeleteCommand.Transaction = trans;
daTmp.DeleteCommand.CommandTimeout = 120;
daTmp.Update(dtToWrite);
trans.Commit();
}
catch (OdbcException ex)
{
trans.Rollback();
throw ex;
}
}
}
}
odbcConn.Close();
}
}
希望这有帮助。
newTable 上的主键是必需的,否则可能会收到 CommandBuilder 异常。
BR
塞拉克
你已经从Excel电子表格中获取了信息,并将其存储在数据表中。
在将大量数据导入 SQL 之前,您需要做的第一件事是验证您从电子表格中读入的内容。
您有几个选项,其中一个是执行与读取数据的方式非常相似的操作,即使用 SQLAdapter 执行插入到 SQL 数据库的操作。在这种情况下,您真正需要做的就是创建一个新连接并编写 INSERT 命令。
这里有很多这样做的例子。
我会使用的另一个选项是LINQ to CSV(http://linqtocsv.codeplex.com/(。
有了这个,您可以将所有数据加载到类对象中,这样可以更轻松地在执行 INSERT 到 SQL 之前验证每个对象。
如果您的经验有限,请使用 SQLAdapter 连接到您的数据库。
祝你好运