现在需要往SQL Server里加入大量的数据(单行文本大约1000字节、每月插入后数据文件大约500MB),因为字段数特别多,考虑到用程序拼INSERT INTO比较长,采用了Rs.AddNew这种方式,但我打开时用的是
Rs.Open TableName,Conn,adOpenKeyset,adLockOptimistic
请问,第三、四个参数的使用,对Rs.AddNew的速度有何影响?采用何种方式会最快?我的所有字段都没有建立索引。

解决方案 »

  1.   

    添加一条新记录是通过RecordSet对象的Addnew方法实现的,还是通过执行SQL语句中的insert语句也可以添加新记录,为何不选用后者呢?二者有何区别呢?从本质上说,ADO的Addnew方法只是将“Insertinto”语句封装了起来,所以,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的“翻译”时间,尤其当对大量数据进行操作的时候表现得更为明显。但是直接使用SQL语句的缺点:不能传递太长的字段内容,在向数据库中 IMAGE字段加入数据时,长文本数据时,就需要使用Addnew了。此外,当字段比较多时SQL语句将会很长而导致不易排错,推荐有经验的编程者优先考虑。相比较而言,RecordSet对象的Addnew方法首先需要建立一个可更新的RecordSet对象,并且一直保持到Update结束,所以比较消耗系统资源。不过它的优点是灵活性比较好,代码容易阅读,除错方便,推荐新手使用。
      

  2.   

    有个最长的表9523字节,看来还是AddNew。INDEX的话,我听你的,在下一个版本中加入设置索引的选项。
    INSERT INTO我手工也要包装,还是系统函数比我写的高效省时,就教给它了。但是仍然不知道锁定类型对AddNew的影响。
      

  3.   

    这样的效率可能会低一点,建议ADDnew所有数据后,批量提交。
    感觉AddNew的效率会比SQL慢。最好使用insert table select * from table
      

  4.   

    adLockOptimistic  乐观锁改成批处理锁比较好 ,最后批量提交,否则加一条提交一条影响效率
      

  5.   

    如果是用insert拼接,就不必要打开记录集了,用事务和union all来适时提交
      

  6.   

    请问,改批量乐观锁定后,如果我在一个文件的结尾加.UpdateBatch,那会不会太大了呢?比如有个文本文件200MB,如果放在这几万条长文本行都.AddNew后,.UpdateBatch还来得及吗?内容够用吗?
      

  7.   

    200MB的东西不建议直接存在字段中,真的要存,用啥方法效率都不高
    真的要存,可以先存不大的,批量执行,再存大的,一条一条执行,
    另rs.open的时候直接top 0 结果集,减少网络流量,
    conn用客户端游标
      

  8.   

    从本质上说,ADO的Addnew方法只是将“Insertinto”语句封装了起来,所以,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的“翻译”时间,尤其当对大量数据进行操作的时候表现得更为明显。但是直接使用SQL语句
    ----------------------------------------------------------------
    不是对insert ,update,delete封装那么简单,起码图片insert是搞不了的.
    感觉是较底层的封装.
      

  9.   

    最后一个建议设为adLockBatchOptimistic
    将要插入的记录全部输入后,再用UpdateBatch方法一次提交全部记录.
      

  10.   

    如果是一次导入大量数据,而且表又没有索引,可以考虑BCP & SSIS