• SqlBulkCopy实现大容量数据快速插入数据库中


    一般情况下,我们手写sqlhelper类,在此类中定义一个数据插入到数据库的一个方法。将数据库连接密封在using()的语句中。using显示了Idispose接口。可以及时释放数据库连接资源。代码如下:

    //以下为方法中语句

    using(Sqlconnection conn=new Sqlconnection(constr))//"constr"为连接字符串

    {

         conn.Open();

         using(SqlCommand cmd=conn.CreateCommand())

         {

              cmd.CommandText=sql;//"sql"为插入数据库操作语句

              cmd.ExecuteNonquery();

         }

    }

    但是这样的数据插入操作,面对大批量的数据插入时,所耗费的时间很长。有没有更好的方法能够实现数据的快速插入呢?

    此时,微软早已为我们准备好了一个方法,可以实现数据的快速插入。

    代码(我的项目的部分代码)如下:

          string constr = "Data Source=.;Initial Catalog=ceshi;Integrated Security=true";
                using(SqlConnection conn=new SqlConnection(constr))
                {
                    conn.Open();
                    DateTime starttime = System.DateTime.Now;
                    using(SqlCommand cmd=conn.CreateCommand())
                    {
                        OpenFileDialog ofd = new OpenFileDialog();
                        ofd.Filter = "文本文件|*.txt";
                        if (ofd.ShowDialog() == false)
                        {
                            return;
                        }
                        string filename = ofd.FileName;
                        string[] lines = File.ReadLines(filename,Encoding.Default).ToArray();
                        DataTable table = new DataTable();
                        table.Columns.Add("tel_id");
                        table.Columns.Add("area");
                        table.Columns.Add("tel_type");
                        table.Columns.Add("area_tel");
                        for (int i = 1; i < lines.Count(); i++)
                        {
                            string line=lines[i];
                            string[] liness = line.Split(' ');
                            string tel_id = liness[0];
                            string area=liness[1];
                            string tel_type=liness[2];
                            string area_tel = liness[3];
                            DataRow row = table.NewRow();
                            row["tel_id"]=tel_id;
                            row["area"] = area;
                            row["tel_type"] = tel_type;
                            row["area_tel"] = area_tel;
                            table.Rows.Add(row);
                        }
                        using(SqlBulkCopy sbc=new SqlBulkCopy(constr))//SqlBulkCopy是大批量数据复制
                        {

                              //以下括号中的第二个参数是数据库中表的字段名
                            sbc.DestinationTableName = "Tel";
                            sbc.ColumnMappings.Add("tel_id","tel_id");
                            sbc.ColumnMappings.Add("area", "area");
                            sbc.ColumnMappings.Add("tel_type", "tel_type");
                            sbc.ColumnMappings.Add("area_tel", "area_tel");
                            sbc.WriteToServer(table);
                        }
                        DateTime endtime = System.DateTime.Now;
                        TimeSpan ts = endtime - starttime;
                        double hao = ts.TotalSeconds;
                        MessageBox.Show(hao.ToString());
                    }
                }

    有兴趣的朋友可以试一下哦!

  • 相关阅读:
    《华东交通大学2018年ACM“双基”程序设计竞赛*补》
    《多校补题》
    《HDU多校第五场》
    前端开发框架
    Myeclipse Weblogic Launches下的classpath配置文件目录
    正则表达式:元字符 简
    Freemarker
    SSM整合
    MySQL基础
    Redis与Spring Data Redis
  • 原文地址:https://www.cnblogs.com/panchangtao/p/3348939.html
Copyright © 2020-2023  润新知