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

C# 使用C windows窗体应用程序将数据从Excel(.CSV)文件上载到SQL,c#,sql,sql-server,excel,csv,C#,Sql,Sql Server,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=

我正在使用此方法将数据上载到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();
    }
}
我有一个.CSV格式的Excel表格,大约有1048313个条目。这种批量复制方法只适用于36000到60000个条目。我想询问是否有任何方法可以从Excel中选择前30000个条目并将其上载到SQL Server表,然后再次选择下一块30000行并将其上载到SQL Server,依此类推,直到最后一个条目被存储

创建一个数据表以存储csv文件中需要插入到目标表中的值。datatable中的每一列都对应于csv文件中的一个数据列。 在SQL Server上创建一个值为的自定义数据类型表,以匹配您的数据表,包括数据类型和长度。因为这篇文章被标记为SQLServer而不是access,因为您的示例连接字符串似乎与此相矛盾。 使用文本读取器和计数器变量,用30000条记录填充数据表。 将数据表传递给insert查询或存储过程。参数类型为SqlDbType.Structured。 如果作业失败,需要重新启动,第一步可能是根据字段中的预定义键确定最后插入的值。您还可以使用左外部联接作为insert查询的一部分,仅插入表中不存在的记录。这些只是重新启动失败的ETL作业的一些更常见的技术。
与大容量复制相比,此技术具有一些战术优势,因为它增加了灵活性,并且与目标表的耦合较少,因此表的更改可能不太稳定,具体取决于更改的性质

嗯。。csv是一种非常简单的格式。使用文件读取器操作文件不是更容易吗?只要每次读下30000行如果每次我都要创建一个新表,那么它很简单,但我必须更新现有表,如果它以某种方式断开连接或发生一些错误,那么我也必须回滚所有当前更改。。这就是问题所在。谢谢史蒂文。我确实改变了,我不能在这里评论我改变的代码。现在,我得到一个错误,源或目标列映射不匹配。datatable中的列数据类型需要与sql server中的表值类型匹配。您还需要确保从csv文件插入到datatable c中的数据符合定义的数据列类型。所以一切都需要匹配文本->数据表->表值参数不客气,我很高兴这对你有用。通常,如果答案满足问题,您会将答案标记为已接受答案。