黑马程序员技术交流社区

标题: 大批量导入数据SqlBulkCopy的使用 [打印本页]

作者: 林嘉健    时间: 2013-1-12 00:13
标题: 大批量导入数据SqlBulkCopy的使用
今天看老杨的视频学着做那个归属地查询, 网上找一下资料导入。

杯具的20W条数据,然后就百度找一下有什么方法能快速导入嘛。听说那个SqlBulkCopy挺牛x的

有童鞋介绍一下怎么用吗?
作者: 林其荣    时间: 2013-1-12 00:46
SqlBulkCopy导入大批量的数据非常高效,可以将内存中的数据表直接的一次性的存储到数据库中
我给你介绍下怎么使用:
        //string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//配置连接字符串
           DataTable table = new DataTable();//实例化一个SqlBulkCopy对象需一DataTable对象作实参
            table.Columns.Add("StartTel");//为本地的table对象添加列数据
            table.Columns.Add("city");
            table.Columns.Add("TelType");
            OpenFileDialog ofd = new OpenFileDialog();//常规IO流,导入txt文件
            if (ofd.ShowDialog() != true)
            {
                return;
            }
            else
            {
                ofd.Filter = "文本文件|*.txt|所有文件|*.*";//设置过滤器
                string fileName = ofd.FileName;
             string[] lines  =  File.ReadAllLines(fileName, Encoding.Default);//编码形式设置默认,防止乱码
            
             foreach (string line in lines)
             {
                 string[] str = line.Split('\t');
                 string StartTel = str[0];
                 string city  = str[1];
                 city = city.Trim('"');
                 string TelType = str[2];
                 TelType = TelType.Trim('"');

                 DataRow row = table.NewRow();
                 row["StartTel"] = StartTel;//每行导入数据
                 row["city"] = city;
                 row["TelType"] = TelType;
                 table.Rows.Add(row);
             }
            }


            using (SqlBulkCopy sbl = new SqlBulkCopy(connStr))//使用using,执行完代码体则自动调用Dispose方法释放资源
            {
                sbl.DestinationTableName = "T_TelNum";//目标数据库名
                sbl.ColumnMappings.Add("StartTel", "StartTel");//第一个参数为本地table表的列明,第二个参数为数据库表的列名
                sbl.ColumnMappings.Add("city", "Area");
                sbl.ColumnMappings.Add("TelType", "TelType");
                sbl.WriteToServer(table);//往数据库写
                MessageBox.Show("ok");
            }
        
作者: 林嘉健    时间: 2013-1-12 00:51
林其荣 发表于 2013-1-12 00:46
SqlBulkCopy导入大批量的数据非常高效,可以将内存中的数据表直接的一次性的存储到数据库中
我给你介绍下怎 ...
  1. string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString
复制代码
这句神马意思
作者: 林其荣    时间: 2013-1-12 01:19
林嘉健 发表于 2013-1-12 00:51
这句神马意思

把连接字符串放到配置文件中

先添加一个 应用程序配置文件 - 然后再 添加 引用 把 System.configuration 引用上

<configuration>
  <connectionStrings>
    <add name="connStr" connectionString="Data Source=.\sqlexpress;Initial Catalog=PetShop;Integrated Security=True"/>
  </connectionStrings>
</configuration>

把上面这段代码拷入App.config  

connectionString是填你连接到数据库的信息
作者: 林嘉健    时间: 2013-1-12 12:33
林其荣 发表于 2013-1-12 01:19
把连接字符串放到配置文件中

先添加一个 应用程序配置文件 - 然后再 添加 引用 把 System.configuration ...

谢了。说得挺详细的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2