Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用SqlBulkCopy在多个表中导入CSV_C#_Sql Server_Sqlbulkcopy - Fatal编程技术网

C#使用SqlBulkCopy在多个表中导入CSV

C#使用SqlBulkCopy在多个表中导入CSV,c#,sql-server,sqlbulkcopy,C#,Sql Server,Sqlbulkcopy,使用SqlBulkCopy时,无法将数据从.CSV文件导入多个SQL Server表 它正在一个表中导入 我正在尝试使用SqlBulkCopy,因为在我读到的大多数主题中,它都说这是最快的解决方案,我每天需要将100-200万行导入8个表中 提前感谢您的推荐 namespace SQLBulkDT2012 { public class CsvBulkCopyDataIntoSqlServer { public static void Main(string[] a

使用
SqlBulkCopy
时,无法将数据从
.CSV
文件导入多个SQL Server表

它正在一个表中导入

我正在尝试使用
SqlBulkCopy
,因为在我读到的大多数主题中,它都说这是最快的解决方案,我每天需要将100-200万行导入8个表中

提前感谢您的推荐

namespace SQLBulkDT2012
{
    public class CsvBulkCopyDataIntoSqlServer
    {
        public static void Main(string[] args)
        {
            LoadCsvDataIntoSqlServer();
            Console.WriteLine("Done!");
            Console.ReadKey();
        }

        static string GetPath()
        {
            string filePath = Path.Combine(Environment.CurrentDirectory, "test.csv");
            return (filePath);
        }

        static void LoadCsvDataIntoSqlServer()
        {
            // This should be the full path
            string filePath = GetPath();
            bool IsSuccessSave = false;

            SqlTransaction _transaction = null;

            using (var textFieldParser = new TextFieldParser(filePath))
            {
                textFieldParser.TextFieldType = FieldType.Delimited;
                textFieldParser.Delimiters = new[] { "," };
                textFieldParser.HasFieldsEnclosedInQuotes = true;

                var connectionString = ConfigurationManager.ConnectionStrings["SQLBulkDT2012.Properties.Settings.`CMSConnectionString`"].ConnectionString;

                var dataTable = new DataTable("Temp_Table");
                // Add the columns in the temp table
                // 001
                dataTable.Columns.Add("COLUMN_001");
                // 002
                dataTable.Columns.Add("COLUMN_002");
                // 003
                dataTable.Columns.Add("COLUMN_003");
                // 004
                dataTable.Columns.Add("COLUMN_004");
                using (var sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    using (_transaction = sqlConnection.BeginTransaction())
                    {
                        // Truncate the live table
                        // Create the bulk copy object
                        using (SqlBulkCopy sqlBulkCopy001 = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.KeepIdentity, _transaction))
                        {
                            sqlBulkCopy001.BatchSize = 99999;
                            sqlBulkCopy001.DestinationTableName = "SY001_tst";
                            // Setup the column mappings, anything ommitted is skipped
                            // 001
                            sqlBulkCopy001.ColumnMappings.Add("COLUMN_001", "COLUMN_001");
                            // 002
                            sqlBulkCopy001.ColumnMappings.Add("COLUMN_002", "COLUMN_002");
                            sqlBulkCopy001.WriteToServer(Table001);
                        }
                        // Create the bulk copy object
                        using (SqlBulkCopy sqlBulkCopy002 = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.KeepIdentity, _transaction))
                        {
                            sqlBulkCopy002.BatchSize = 99999;
                            sqlBulkCopy002.DestinationTableName = "SY002_tst";
                            // Setup the column mappings, anything ommitted is skipped
                            // 001
                            sqlBulkCopy002.ColumnMappings.Add("COLUMN_003", "COLUMN_003");
                            // 002
                            sqlBulkCopy002.ColumnMappings.Add("COLUMN_004", "COLUMN_004");
                            sqlBulkCopy002.WriteToServer(Table002);
                        }

                        _transaction.Commit();
                        IsSuccessSave = true;
                    }
                    sqlConnection.Close();
                }
            }
        }
    }
}

SqlBulkCopy
速度极快,因为它只直接加载到一个表中,不支持在加载时对数据进行任何拆分、验证或转换。因此,您只需将这些行导入临时表(直接使用
SqlBulkCopy
),并且仅在加载后将它们分发到SQL Server中的8个目标表中。使用SQLCMD.EXE会更快。见: