SqlBulkCopy批量写副25万漫长数据仅需要3s

Microsoft SQL Server
提供一个誉为 bcp 的兴的命令提示符实用工具,用于将数据由一个阐明动到其它一个阐明(表既可以于同一个服务器上,也足以当不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还发出其他以数据加载到
SQL Server 表的不二法门(例如 INSERT
语句),但对待SqlBulkCopy 提供明确的属性优势。

使用 SqlBulkCopy 类只能望 SQL Server 表写副数据。但是,数据源不杀
SQL
Server;可以使用外数据源,只要数据可加载到 DataTable.aspx) 实例或只是利用 IDataReader.aspx) 实例读取数据。

下面介绍下Demo(批量形容副258114久数数码属地数量)

图片 1

            //打开选择文档对话框
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "文本类型|*.txt|文本类型|*.csv";//限定打开类型
            if (ofd.ShowDialog() == false)
            {
                return;
            }
            string fileName = ofd.FileName;
            string[] lines = File.ReadAllLines(fileName, Encoding.Default).ToArray();//打开文本,使用指定的格式编码读出所有行,然后关闭
            //GetTableCoulmn(lines);
            #region 原始代码
            int s = System.Environment.TickCount;//记录函数执行开始时间
            DataTable table = new DataTable();
            //建立列名和导入的文件中的列名对应
            table.Columns.Add(new DataColumn("StartNum"));
            table.Columns.Add(new DataColumn("TelTypes"));
            table.Columns.Add(new DataColumn("City"));
            table.Columns.Add(new DataColumn("TelCode"));
            for (int i = 0; i < lines.Length; i++)
            {
                //插入行数据
                string[] strs = lines[i].Split('\t');//字符串分割
                DataRow row = table.NewRow();
                row["StartNum"] = strs[0];
                row["TelTypes"] = strs[2].ToString().Trim('"');//消除两边字符
                row["City"] = strs[1].ToString().Trim('"');
                row["TelCode"] = strs[3].ToString().Trim('"');
                table.Rows.Add(row);
            }

            string connstr = ConfigurationManager.ConnectionStrings["cnnstr"].ConnectionString;
            using (SqlConnection cnn = new SqlConnection(connstr))
            {
                cnn.Open();
                SqlBulkCopy copy = new SqlBulkCopy(cnn);
                copy.DestinationTableName = "TelephoneFull";//插入目标表数据
                copy.ColumnMappings.Add("StartNum", "StartNum");//列名、数据库表字段
                copy.ColumnMappings.Add("TelTypes", "TelTypes");
                copy.ColumnMappings.Add("City", "TelArea");
                copy.ColumnMappings.Add("TelCode", "TelCode");
                copy.WriteToServer(table);
            }
            int j = System.Environment.TickCount;//记录函数执行结束时间
            MessageBox.Show("成功写入" + lines.Count() + "条数据,耗时" + (j - s) + "ms");
            #endregion

 

测试后显示

图片 2

上述

定义
SqlBulkCopy.aspx)
实例的数据源中的排列与拖欠实例的对象表中的排次的映射。 

倘数据源和对象表有相同的列数,并且数据源中每个源列的序号位置匹配相应目标列的序号位置,则任需
ColumnMappings
集合。但是要是列计数不同,或序号位置不雷同,则必须使
ColumnMappings,以保将数据复制到正确的列中。

相关文章