A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林嘉健 中级黑马   /  2013-1-12 00:13  /  1877 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看老杨的视频学着做那个归属地查询, 网上找一下资料导入。

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

有童鞋介绍一下怎么用吗?

评分

参与人数 1技术分 +2 收起 理由
潘梦军 + 2

查看全部评分

4 个回复

倒序浏览
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");
            }
        

评分

参与人数 1技术分 +2 收起 理由
潘梦军 + 2

查看全部评分

回复 使用道具 举报
林其荣 发表于 2013-1-12 00:46
SqlBulkCopy导入大批量的数据非常高效,可以将内存中的数据表直接的一次性的存储到数据库中
我给你介绍下怎 ...
  1. string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString
复制代码
这句神马意思
回复 使用道具 举报
林嘉健 发表于 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是填你连接到数据库的信息

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
林其荣 发表于 2013-1-12 01:19
把连接字符串放到配置文件中

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

谢了。说得挺详细的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马