日期:2014-05-17  浏览次数:20743 次

百万级数据插入数据库
数据量很大大概有几百万条,有重复

数据分别为 用户名,密码,性别,年龄  保存在一个txt中(五十多个G) 分别对应着数据库中的表 usermessage中的 username ,pwd, sex,age

密码在插入时需要加密  Encryption(密码);

怎样才能快速插入,我用传统的方法,程序运行了几天了才插入了不到十分之一.

插入后要数据无重复,已username列为准

------解决方案--------------------
BULK SQL  插入数据库后再去过滤掉重复的
------解决方案--------------------
首先,我们把数据加载到一个DataSet        DataSet ds = new DataSet();
        private void btLoadData_Click(object sender, EventArgs e)
        {
            string dataFile = "CustomersData.xml";
            ds.ReadXml(dataFile);
            bindingSource1.DataSource = ds;
            bindingSource1.DataMember = "Customers";
            dataGridView1.DataSource = bindingSource1;
            
        }
        /// <summary>
        /// 使用新的API,批量导入,这个速度很快,大约26毫秒,很显然,这种方式只写一次日志,不会为每一行写日志
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btBCP_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(GetConnectionString()))
            {
                SqlBulkCopy bcp = new SqlBulkCopy(conn);
                bcp.DestinationTableName = "Customers";
                bcp.BatchSize = 100;//这是批尺寸可以调整
                for (int i = 0; i < 11; i++)
                {
                    bcp.ColumnMappings.Add(i, i);
                }
                TimeSpan startTime = System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime;
                conn.Open();
                bcp.WriteToServer(ds.Tables[0]);