CMyRecordSet : CRecordset;
CMyRecordSet set1(pdb);
set1.m_strFilter = "ID=2";
set1.Open();
我想改成这样
set1.m_strFilter = "ID= :KK";
//在Open之前如何传人参数KK的值?
set1.Open();我用的是ODBC连接Oracle数据库,因为第二个执行方法比第一个有效率,请问该如何解决此问题。问题2:
一般情况下一个DataBase跟数据库建立一个Session,不管打开多少表都是一个Session,我想问一下在
VC中用ODBC连接Oracle数据库是不是也是一个DataBase建立一个Session,而不管下面打开多少个Recordset?如果是这样,是否需要进行一些设置?

解决方案 »

  1.   

    1.直接执行sql语句
    CString strSql;
    strSql.Format("select * from 你的表名 where id = %d",kk);
    set1.Open(strSql);2.
    只需要一个连接
      

  2.   

    set1.m_strFilter.Format("id = %d",kk);连接数据库只需要一次就可以了。
      

  3.   

    要注意SQL语句里的空格,有时候会引起错误的。
      

  4.   

    谢谢两位回答,对于问题1你们的答案肯定是错的
    如果采取你们的说的方式,等价于在Oracle里面采取下面的方法执行
    1.select * from 你的表名 where id = 123;
    2.select * from 你的表名 where id = 456;
    Oracle看到下面的语句后会分析两次,影响效率,而采取
    select * from 你的表名 where id = :KK后,分别传人123和456给KK,Oracle只需要分析一次
    明显来的有效率,因为Oracle在执行语句之前首先会到缓冲去找有没有相同的语句,然后再分析,
    对于情况1是两条不同的语句,而2确是一条。请大侠们帮助解决情况2的执行方法
      

  5.   

    问题2:我问的是当一个DataBase连接多个表时,是否就建立了一个Session还是多个Session?
      

  6.   

    连接数据库就一个session吧,同表没什么联系