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

批量数据保存到ms sql有关问题

2013-08-04 
批量数据保存到ms sql问题数据库MS SQL2008,TADODataSet+cxGrid明细记录1000条,目前用TADODataSet.UpdateB

批量数据保存到ms sql问题
数据库MS SQL2008,TADODataSet+cxGrid
明细记录1000条,目前用TADODataSet.UpdateBatch方式要4分钟.
求优化解决思路! delphi mssql
[解决办法]
帮你顶一下,adodataset不熟,习惯用adoquery,感觉adoquery挺快的啊
[解决办法]
跟楼主一样,前段时间我一直在寻求通过Ado批量提交数据库的方法,Dephi的资料现在少了,最初我也是通过AdoQuery来实现的,如下:

    connection.BeginTrans();
    adoQuery.Active := False;
    adoQuery.LockType := ltBatchOptimistic;
    adoQuery.SQL.Clear();
    adoQuery.SQL.AddStrings(sl);
    adoQuery.Active := True;
    //adoQuery.Post();
    adoquery.ExecSQL();
    adoQuery.UpdateBatch();
    connection.CommitTrans();

但执行下来总有这样那样的问题,后面改成AdoCommand了,如下:

    if sl.Count >= 100 then
    begin
      try
        connection.BeginTrans();
        command.CommandText := sl.Text;
        command.Prepared := True;
        command.Execute();
        connection.CommitTrans();

目前用下来没有大的问题,sl为多个Insert Into语句。
[解决办法]
CXgrid数据多了速度会很慢,换DBgid或DBGRIDEH试试。
[解决办法]
保存成XML文件进行处理会更快
详细可以参考以下链接(是VB 语言实现):
http://www.perfectxml.com/articles/XML/ExportSQLXML.asp
[解决办法]
  直接写update语句, 比如update tab1 set fld ='1' where ID in ('1', '2', ...., 'N')
[解决办法]
  是循环取gird对应的数据集,求出('1', '2', ...., 'N')
  然后一次性提交update语句。
  比如我审批或作废1000个记录,就用这种方式,大概是几秒内完成的事情而已。


  
  顺便说一句,这种保存一次,提交一次的算法,属于基础或教条式的方法。
  遇到大数据量处理时,必须改为准备好数据,一次提交sqlserver。

  这个似乎有点设计模式,或者有点哲学的味道。  
[解决办法]
开二个线程同时使用数据库操作应该可以。

热点排行