ADO操控数据库SqlBulkCopy批量数据插入

来源:互联网 发布:淘宝支付宝登录 编辑:程序博客网 时间:2024/04/28 14:53



在数据库导入过程中,如果小数据就没什么影响,如果过大数据,那么一条一条的插入,是不是很麻烦啊,而且浪费时间,

需要 引用命名空间using System.Data.SqlClient;using System.Data;

       OpenFileDialog ofd = new OpenFileDialog();//选择文件,准备插入数据库
            ofd.Filter = "文本文件|*.txt";
            if (ofd.ShowDialog() == false)
            {
                return;
            }

            string[] lines = File.ReadLines(ofd.FileName, Encoding.Default).ToArray();//把导入的数据先弄成数组
            string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;//这是连接数据库的App文件,

//   

   <connectionStrings>//这是App中的文件信息
        <add name="SQL" connectionString="server=.;database=ADO.NET;Integrated Security=true" />
    </connectionStrings>

//
            DataTable table = new DataTable();
            table.Columns.Add("StartTelNum");//这三个列必须创建,否则就会报错!这都创建的是要插入的列的别名,
            table.Columns.Add("City");
            table.Columns.Add("TelType");
            DateTime startTime = DateTime.Now;//获取运行当前时间

  //for循环里面,就是对要插入的数据进行一下处理,我处理的是手机号码归属地,你们可以处理别的,在上面,创建列的时候,也是,自己需求来
            for (int i = 1; i < lines.Count(); i++)//跳过第一行表头
            {
                string line = lines[i];
                //注意,文件里是按照制表符分割的,不是字符串
                string[] strs = line.Split('\t');//VS里“\t”的为制表符
                string startTelNum = strs[0];//第一个是号码段
                string city = strs[1];//第三个个是号码所属城市
                city = city.Trim('"');//去掉两边的双引号
                string telType = strs[2];//第二个是号码网络类型
                telType = telType.Trim('"');//去掉两边的双引号
                DataRow row = table.NewRow();//创建一个DataRow对象
                row["StartTelNum"] = startTelNum;//这个“StartTelNum”会提示没有,所以要在前面创建一个列
                row["City"] = city;
                row["TelType"] = telType;
                //到这一步,还没有加到table里面,下面加入
                table.Rows.Add(row);//NewRow只是创建,没有插入
            }
   
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conStr))//然后就可以插入了,虽然有些麻烦,但是,效率极高,总比一条一条的插入强吧。
            {
                bulkCopy.DestinationTableName = "T_TelNum";//表示的是要批量把数据插入到哪个表中
                //建立数据应用字段和DataTable字段的应用关系
                bulkCopy.ColumnMappings.Add("StartTelNum", "StartTelNum");
                bulkCopy.ColumnMappings.Add("City", "TelArea");
                bulkCopy.ColumnMappings.Add("TelType", "TelType");//添加DataTable中列明和数据库表中列名的映射
                bulkCopy.WriteToServer(table);//批量把数据写到服务器中
            }
            TimeSpan ts = DateTime.Now - startTime;//获取插入数据完毕后用了多少事件
            MessageBox.Show(ts.ToString());