没有什么好的办法。
用updatebatch
用存储过程。
cachesize在读取记录集的时候好用,不知道在插入纪录时管不管用,你试试吧。

解决方案 »

  1.   

    在SQL Server写个存储过程吧。
      

  2.   

    cache大点,让后尽量利用内存和磁盘进行数据交互,且时间尽量长
      

  3.   

    如果插入35000条记录,每条记录有5个字段的数据
    一般情况下需要多少秒啊,我的需要80秒,难以忍受
    我是用一个操作ado的类来插入数据的,一条一条记录的插入
    而以前我是用文件操作,速度非常快,几秒钟搞定
    难道改用数据库就这么慢?
    郁闷
    高手帮忙出注意,分不够再加
      

  4.   

    你是不是插入一条后又要重新开连接?
    你可以先插到Recordset中然后用UpdateBatch这样应该快!!
      

  5.   

    可以将若干条(如200条)insert语句用ado的类来执行,而不是一条insert语句,减少网络和其他开销。
      

  6.   

    怎么用ado的类来实现,能具体的吗?
    下面是部分代码,大家看看问题在哪里
    /*****************************************************************
    ** 函数名: WriteAccidentRecord
    ** 功能描述: 写事故记录
    ** 变量说明: strKey 汽车钥匙号,pRecord 记录数组指针,iNum写入的记录条数
    ** 返回值:
    ** 作  者: far
    ** 日  期: 2002.5.26 21:35
    ****************************************************************/
    BOOL CManageDb::WriteAccidentRecord(CString strKey, SRECORD* pRecord,int iNum)
    {
    //打开运行记录表
    if(!m_pRs.Open(m_Ado.GetActiveConnection(), "事故记录表", CADORecordset::openTable))
    {
    return 0;
    }
    //添加记录
    for(int i = 0; i<iNum; i++)
    {
    COleDateTime time(pRecord[i].cTime.GetYear(), pRecord[i].cTime.GetMonth(), pRecord[i].cTime.GetDay(),
    pRecord[i].cTime.GetHour(), pRecord[i].cTime.GetMinute(), pRecord[i].cTime.GetSecond());  m_pRs.AddNew ();
    m_pRs.SetFieldValue ( "KEY", strKey);
    m_pRs.SetFieldValue ( "速度", pRecord[i].iSpeed);
    m_pRs.SetFieldValue ( "运行状态", pRecord[i].bStop);
    m_pRs.SetFieldValue ( "控制状态", atoi((char*)pRecord[i].chSwitch));
    m_pRs.SetFieldValue("时间", time);
    m_pRs.SetFieldValue("压缩项", pRecord[i].iCompress );
    }
    m_pRs.Update ();
    m_pRs.Close ();

    return TRUE;}