读书人

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

发布时间: 2013-06-19 10:26:41 作者: rapoo

一次性插入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();
}

读书人网 >asp.net

热点推荐