我用MFC的ODBC编写数据库应用程序,访问本机的SQL server2000,周期性的往数据库中写数据(每次约1000多条记录)过程如下,先生成一个CRecordset类,与数据源连接,选中要操作的表,在程序中实现如下:
myset.Open();
myset.m_pDatabase->beginTrans();
for(;;)//1000多次循环,写1000多次记录
{
  myset.Addnew();
  .....
  myset.Update();
}
myset.m_pDatabase->CommitTrans();
myset.Close();
刚开始是按上述编写,即每次操作都要打开记录集,操作完成后关闭,后来改成在初始化时打开记录集,以后每次操作前用requery()来建立记录集,在程序退出时才用close()关闭。
请问这样做有问题吗?
另外我的程序在运行一段时间后会出现“超时已过期”的消息,然后停止运行,怎么回事?怎样解决?

解决方案 »

  1.   

    数据库表里的记录达到一定数目时,就会超时.
    可以用CDatabase的SetQueryTime()将超时时间改长点.
    添加数据不必去打开表,你可以如下作:
    CDatabase m_db;
    CString sql;
    m_db.Open(...);
    m_db.BeginTrans();
    for(....)
    {
       sql="insert into table values(...)";
       m_db.ExecuteSQL(sql);
    }
    m_db.CommitTrans();
    m_db.Close();
      

  2.   

    能不能介绍一些vc 的odbc常识?
    如:open () close()之类意思,帮助出学者,有没有资料(电子书也行),看到你们懂这么多,好羡慕呀
      

  3.   

    顺便说一下,在MFC中好像不能直接用向导生成CDatabase类,我每次用时都是用CRecordset类的m_pDatabase.连接用默认连接。这样做连接数据源似乎很不灵活,比如如果想通过一个对话框来更改数据源,好像不行。是不是要用ODBC API来做,但又觉得太麻烦,有更好的办法吗?