首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

一次性插入10万条数据,如何提高效率

2013-06-19 
一次性插入10万条数据,怎么提高效率我现在一次要像数据库里一次添加10万条数据,有什么办法可以提高添加的

一次性插入10万条数据,怎么提高效率
我现在一次要像数据库里一次添加10万条数据,有什么办法可以提高添加的效率,,添加10万条信息,该表就6个字段,大概要多长时间,添加完,,有谁知道有效率的添加吗,,,请来的人不要问我为什么添加那么多条数据,,,无聊闲话的别来,,求高手帮忙,谢谢,废话也不多说了,在线等
[解决办法]

引用:
我现在一次要像数据库里一次添加10万条数据,有什么办法可以提高添加的效率,,添加10万条信息,该表就6个字段,大概要多长时间,添加完,,有谁知道有效率的添加吗,,,请来的人不要问我为什么添加那么多条数据,,,无聊闲话的别来,,求高手帮忙,谢谢,废话也不多说了,在线等


这10万条记录从哪来的,如果能直接通过SQL语句在数据库层面处理是最好的了,毕竟应用程序和数据库沟通也是要时间的。
[解决办法]

        /// <summary>
        /// SqlDataReader批量添加(没有事务)
        /// </summary>
        /// <param name="Reader">数据源</param>
        /// <param name="Mapping">定义数据源和目标源列的关系集合</param>
        /// <param name="DestinationTableName">目标表</param>
        public static void MySqlBulkCopy(SqlDataReader Reader, SqlBulkCopyColumnMapping[] Mapping, string DestinationTableName)
        {
            using(SqlBulkCopy copy=new SqlBulkCopy(ConnectionString))
            {
                copy.DestinationTableName = DestinationTableName;//设置要添加的表名
                if(Mapping!=null)
                {
                    //如果有匹配
                    foreach (SqlBulkCopyColumnMapping Mapp in Mapping)
                    {
                        copy.ColumnMappings.Add(Mapp);
                    }
                }
                try
                {
                    copy.WriteToServer(Reader);//批量添加
                }
                finally
                {


                    Reader.Close();//关闭
                }
            }
        }
        #endregion



这个模式是没有事务的,事务的,你查一下MSDN
[解决办法]
DateTime begin = DateTime.Now;
            string connectionString = "";
            using(SqlConnection conn = new SqlConnection(connectionString)){
                conn.Open();

                SqlDataAdapter sd = new SqlDataAdapter();
                sd.SelectCommand = new SqlCommand("select top 200 devid,data_time,data_value from CurrentTest", conn);

                DataSet dataset = new DataSet();
                sd.Fill(dataset);
                Random r = new Random(1000);

                sd.UpdateCommand = new SqlCommand("update CurrentTest "
                                + " set data_time = @data_time,data_value = @data_value where devid = @devid", conn);
                sd.UpdateCommand.Parameters.Add("@data_time", SqlDbType.Char, 19, "data_time");
                sd.UpdateCommand.Parameters.Add("@data_value", SqlDbType.Int, 4, "data_value");
                sd.UpdateCommand.Parameters.Add("@devid", SqlDbType.Char, 20, "devid");
                sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
                sd.UpdateBatchSize = 0;
                for (int count = 0; count < 100000;)
                {

                    for (int i = 0; i < 200; i++,count++)
                    {
                        dataset.Tables[0].Rows[i].BeginEdit();


                        dataset.Tables[0].Rows[i]["data_time"] = "2222-22-22 22:22:22";
                        dataset.Tables[0].Rows[i]["data_value"] = 100;
                        dataset.Tables[0].Rows[i]["devid"] = "DEVID"+count;
                        dataset.Tables[0].Rows[i].EndEdit();
                    }
                    sd.Update(dataset.Tables[0]);
                }
  

                dataset.Tables[0].Clear();
                sd.Dispose();
                dataset.Dispose();
                conn.Close();
               
            }
            TimeSpan ts = DateTime.Now - begin;
            MessageBox.Show("ts = " + ts.TotalMilliseconds);


[解决办法]
DBOpen();
        SqlCommand DataCom = new SqlCommand();
        SqlDataAdapter DataAD = new SqlDataAdapter();
        SqlTransaction Trans = null;
        Trans = Conn.BeginTransaction();
        DataCom.Connection = Conn;
        DataCom.Transaction = Trans;
        try
        {
            DataCom.CommandText = Sql;
            DataAD.SelectCommand = DataCom;
            SqlCommandBuilder DataComBu = new SqlCommandBuilder(DataAD);
            DataAD.Update(Tables);
            Trans.Commit();
        }
        catch 
        {
            Trans.Rollback();
        }
        finally
        {
            DBClose();


            DataCom.Dispose();
            Trans.Dispose();
        }

热点排行