Datatable数据插入到Access中,帮忙看一下代码~

srx0098 2016-07-30 10:30:42
想做一个数据更新功能,把一个Access中的数据(新数据)插入到汇总表里,新数据大概有10w条。因为要在新数据中加两列数据,所以先读取到datatable再插到汇总表中。现在看资料写了两种,都可以用,但是速度都很慢,不知道应该怎么改进,求建议~
 OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.mdb; Persist Security Info=True;");
if (conn.State == ConnectionState.Closed)
conn.Open();
for ( int i = 0; i < dt.Rows.Count; i ++)
{
string sql = "insert into 表1(字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8,字段9,字段10,字段11,字段12) values ('" + dt.Rows[i][0].ToString() + "','" + dt.Rows[i][1].ToString() + "','" + dt.Rows[i][2].ToString() + "','" + dt.Rows[i][3].ToString() + "','" + dt.Rows[i][4].ToString() + "','" + dt.Rows[i][5].ToString() + "','" + dt.Rows[i][6].ToString() + "','" + dt.Rows[i][7].ToString() + "','" + dt.Rows[i][8].ToString() + "','" + dt.Rows[i][9].ToString() + "','" + dt.Rows[i][10].ToString() + "','" + dt.Rows[i][11].ToString() + "')";
OleDbCommand cmd = new OleDbCommand(sql, conn);
cmd.ExecuteNonQuery();
}

 OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.mdb; Persist Security Info=True;");
if (conn.State == ConnectionState.Closed)
conn.Open();
OleDbCommand cmd = new OleDbCommand();
List<string> SQLStringList=new List<string> ();
for (int i = 0; i < dt.Rows.Count; i++)
{
string sql = "insert into 表1(字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8,字段9,字段10,字段11,字段12) values ('" + dt.Rows[i][0].ToString() + "','" + dt.Rows[i][1].ToString() + "','" + dt.Rows[i][2].ToString() + "','" + dt.Rows[i][3].ToString() + "','" + dt.Rows[i][4].ToString() + "','" + dt.Rows[i][5].ToString() + "','" + dt.Rows[i][6].ToString() + "','" + dt.Rows[i][7].ToString() + "','" + dt.Rows[i][8].ToString() + "','" + dt.Rows[i][9].ToString() + "','" + dt.Rows[i][10].ToString() + "','" + dt.Rows[i][11].ToString() + "')";
SQLStringList.Add (sql );
}
OleDbTransaction trans = conn.BeginTransaction();
for (int n = 0; n < SQLStringList.Count ; n++)
{
string strsql = SQLStringList[n].ToString();
cmd.Connection = conn;
cmd.Transaction = trans ;
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
trans.Commit();
...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2016-07-31
  • 打赏
  • 举报
回复
主键(如自增列),
秋的红果实 2016-07-31
  • 打赏
  • 举报
回复
数据量大,慢是不可避免的,就用第一种,删除索引,插入完了再建立,因为插入是要维护索引,有额外开销 若果导入的数据没有重复,可以暂时删除主键(自增列),因主键会自动建立聚集索引 另外,只是增加2个字段,为什么要读取出到datatable增加,在数据库直接增加不就得了

111,129

社区成员

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

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

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