数据批量插入Sqlite的优化。。。押宝输光只有这么多分了

HaveOneDream 2010-11-24 09:12:09
public void FastInsertMany(DataTable dt)
{
Open(connStr);
using (DbTransaction dbTrans = conn.BeginTransaction())
{

using (DbCommand cmd = conn.CreateCommand())
{

cmd.CommandText = "INSERT INTO tb_gk_gqtz VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

DbParameter Field1 = null;
DataRow dr = null;
for (int i = 0; i < dt.Rows.Count; i++)
{
dr = dt.Rows[i];
for (int j = 0; j < dt.Columns.Count; j++)
{
Field1 = cmd.CreateParameter();
Field1.Value = dr[j];
cmd.Parameters.Add(Field1);
//Field1 = null;
}
cmd.ExecuteNonQuery();

}

}

dbTrans.Commit();

}

}
插入一千条数据就很慢了,请问如何优化
...全文
443 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hwbox 2010-11-24
  • 打赏
  • 举报
回复
mark 必须马克,学习下大数据量的插入
HaveOneDream 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhoufoxcn 的回复:]
插入一千条无论怎么优化总会比插入一条慢,我不知道你的慢是什么概念?
5s or 50s?
[/Quote]
大几十秒,现在是要将sqlserver取的一张表 插入sqlite,这里采取遍历的方法 ,有没有其他比较好的方法呢
q107770540 2010-11-24
  • 打赏
  • 举报
回复
1楼方法测试是10W条数据28S
周公 2010-11-24
  • 打赏
  • 举报
回复
插入一千条无论怎么优化总会比插入一条慢,我不知道你的慢是什么概念?
5s or 50s?
q107770540 2010-11-24
  • 打赏
  • 举报
回复
对于大量的插入操作,可以利用一个空的DataTable加入要插入的行,达到一定数量提交后清空该表就行了,
实现起来并不算复杂:

DateTime begin = DateTime.Now;
string connectionString = ......;
using(SqlConnection conn = new SqlConnection(connectionString))...{
conn.Open();
SqlDataAdapter sd = new SqlDataAdapter();
sd.SelectCommand = new SqlCommand("select devid,data_time,data_value from CurrentTest", conn);
sd.InsertCommand = new SqlCommand("insert into CurrentTest (devid,data_time,data_value) "
+ " values (@devid,@data_time,@data_value);", conn);
sd.InsertCommand.Parameters.Add("@devid", SqlDbType.Char, 18, "devid");
sd.InsertCommand.Parameters.Add("@data_time", SqlDbType.Char, 19, "data_time");
sd.InsertCommand.Parameters.Add("@data_value", SqlDbType.Int, 8, "data_value");
sd.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
sd.UpdateBatchSize = 0;

DataSet dataset = new DataSet();
sd.Fill(dataset);
Random r = new Random(1000);
for (int i = 0; i < 100000; i++) ...{
object[] row = ...{"DEVID"+i,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),r.Next(1,1000) };
dataset.Tables[0].Rows.Add(row);
if (i % 300 == 0) ...{
sd.Update(dataset.Tables[0]);
dataset.Tables[0].Clear();
}
}
sd.Update(dataset.Tables[0]);
dataset.Tables[0].Clear();
sd.Dispose();
dataset.Dispose();
conn.Close();

}

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧