使用C#windows窗体应用程序将数据上载到Excel(.CSV)文件中

我正在使用此方法将数据上传到SQL。

private void button5_Click(object sender, EventArgs e) { string filepath = textBox2.Text; string connectionString_i = string.Format(@"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};Extended Properties=""Text;HDR=YES;FMT=Delimited""", Path.GetDirectoryName(filepath)); using (OleDbConnection connection_i = new OleDbConnection(connectionString_i)) { connection_i.Open(); OleDbCommand command = new OleDbCommand ("Select * FROM [" + Path.GetFileName(filepath) +"]", connection_i); command.CommandTimeout = 180; using (OleDbDataReader dr = command.ExecuteReader()) { string sqlConnectionString = MyConString; using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) { SqlBulkCopy bulkInsert = new SqlBulkCopy(sqlConnectionString); bulkInsert.BulkCopyTimeout = 180; bulkInsert.DestinationTableName = "Table_Name"; bulkInsert.WriteToServer(dr); MessageBox.Show("Upload Successful!"); } } connection_i.Close(); } } 

我有一个大约1,048,313条目的.CSV格式的Excel工作表。 这种大容量复制方法正在工作大约36000到60000条目。 我想询问是否有任何方法可以从Excel中select第一个30000条目并将它们上载到SQL Server表中,然后再次select下一个30000行的块并将其上载到SQL Server,依此类推,直到最后一个条目已被存储。

  1. 创build一个数据表来存储你的csv文件中需要插入到目标表中的值。 数据表中的每一列都对应于csv文件中的数据列。
  2. 在SQL Server上创build自定义数据types(表值)以匹配数据表,包括数据types和长度。 由于这篇文章被标记为sql-server而不能访问,因为你的示例连接string似乎与此相矛盾。
  3. 使用文本阅读器和计数器variables,用30,000条logging填充数据表。
  4. 将数据表传递给插入查询或存储过程。 参数types是SqlDbType.Structured。
  5. 如果作业失败并且需要重新启动,则第一步可能是从字段中的预定义键确定最后插入的值。 您也可以使用左外连接作为插入查询的一部分,以仅插入表中不存在的logging。 这些只是重新启动失败的ETL作业的一些常用技术。

与大容量复制相比,这种技术具有一些战术上的优势,因为它增加了灵活性,并且不易耦合到目标表,因此根据变化的性质,对表的改变可能不太易变。