黑马程序员:数据库连接池——大批量数据的导入

来源:互联网 发布:数据截断 编辑:程序博客网 时间:2024/05/19 04:51

----------------------  ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

        在导入大批量数据的时候,已经可以用SqlHelper来简化代码的编写,可是代码上的简化并不能带来导入数据时速度的提升,所以在导入数据时就需要用到新的知识了,艾玛,学无知己啊。

        在刚刚开始练习的时候导入较少的数据库还没有感觉,可是在接下来导入号码归属地的数据库时,虽然只有10M多一点,确实华丽丽的用掉的半个多小时,然后再继续跟着视屏学习的过程中终于跟着老师学到了新的导入方法,那就是数据连接池,亲测,3秒钟搞定哦。 

数据库连接池:

        连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

下面是应用数据库连接池的简单导入数据:

 private void button2_Click(object sender, RoutedEventArgs e)
        {//读取文本文件的部分
            int C = 0;
            string connStr = ConfigurationManager.ConnectionStrings["DJLK"].ConnectionString;
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "文本文件|*.txt";
            if (ofd.ShowDialog() != true)
            {


                return;
            }
            string filename = ofd.FileName;
            string[] lines = File.ReadLines(ofd.FileName, Encoding.Default).ToArray();
           //DataTabl部分,把数据放入DataTable
            DataTable table = new DataTable();
            table.Columns.Add("StartTelNum");//在数据放入前对数据要放入的内容提前进行分类
            table.Columns.Add("City");
            table.Columns.Add("TelType");
            for (int i = 1; i < lines.Count(); i++)//利用for循环遍历文本文档,按照分类将数据导入
            {
                string line = lines[i];
                string[] strs = line.Split('\t');//文档中不同类别数据是用空格(\t)分隔
                string startTelNum = strs[0];
                string city = strs[1];
                city = city.Trim('"', '[');
                string telType = strs[2];
                telType = telType.Trim('"', '[');//去除数据中的""和[符号telType = telType.Trim('"', '[');
                DataRow row = table.NewRow();
                row["StartTelNum"] = startTelNum;//整合数据准备导入
                row["City"] = city;
                row["TelType"] = telType;
                table.Rows.Add(row);
                C++;


            }
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr))// //SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr);利用数据连接池进行批量导入加快导入速度
            {
                bulkCopy.DestinationTableName = "T_TelNum";//把DataTable中的数据利用SqlBulkCopy进行导入,这是在建立对应关系
                bulkCopy.ColumnMappings.Add("StartTelNum", "StartTelNum");
                bulkCopy.ColumnMappings.Add("City", "TelAree");
                bulkCopy.ColumnMappings.Add("TelType", "TelType");
                bulkCopy.WriteToServer(table);
            }




            using (SqlConnection conn = new SqlConnection(connStr))//private static string connStr = ConfigurationManager.ConnectionStrings["DJLK"].ConnectionString;
//这事进行数据库连接,using自带垃圾回收机制
            {
                conn.Open();


               
                foreach (string line in lines)
                {
                    string[] strs = line.Split('\t');
                    string startTelNum = strs[0];
                    string city = strs[1];
                    city = city.Trim('"', '[');
                    string telType = strs[2];
                    telType = telType.Trim('"', '[');
                    //数据库连接池
                //     using (SqlCommand cmd = conn.CreateCommand())
                //{
                //    cmd.CommandText =@"Insert into T_TelNum(StartTelNum,TelType,TelAree) values(@StartTelNum,@TelType,@TelAree";
                //       cmd.Parameters.Add(new SqlParameter("@StartTelNum", startTelNum)); 
                //       cmd.Parameters.Add( new SqlParameter("@TelType", telType));
                //       cmd.Parameters.Add(new SqlParameter("@TelAree", city));
                //       cmd.ExecuteNonQuery();
                    
                //}
                }
                MessageBox.Show("导入成功!成功导入" + C + "条数据");
            }


                     
            
        }

 ----------------------  ASP.Net+Android+IOS开发.Net培训、期待与您交流! ---------------------- 

0 0
原创粉丝点击