怎样在vc中实现,连接数据库后不断开?(使用ADO,数据库为SQL Server)
类似pb那样,每次连接到数据库后,Sql server中就存在一个连接,
直到程序退出是或手动断开时才断开?
(ado中connection open以后,如果你执行一个sql语句,他是现连到数据库,然后执行
sql语句,然后断开连接,不知道这种机制有什么好处?)

解决方案 »

  1.   

    谁说的,我用profile查看了sql server ,先connect,sql执行完后disconnect
      

  2.   

    将connection作为全局变量。直到程序最后才close。
    程序中所有的数据库操作都用它就可以了。
    比如:recordset->open(sql,conn,……)
    这样就可以用一个连接做所有的事情了呀。
    而recordset是可以随时关闭的。在操作之前还要确认它已经关闭。
    可以使用函数:isstateclosed(好像是这个,可以查查)检查该recordset的状态
      

  3.   

    不太明白你的意思,本来就可不断的.
    在CONNCTION的作用域中你自己不断开太,它怎么会断呢?通常情况下你打开一个CONNECTION可以反复执行多个操作,比如SQL语句.超出作用域你可以把_CONNECTIONPTR作为参数传递到别的函数域.当然你可以建立全局的,看你的需求和开发环境了.
      

  4.   

    static CADORecordset rsFA;  //CADORecordset是个分装记录集的类,可以自己写或者去codeguru下载
    static TCHAR sqlFA[] = _T("\
    SHAPE {SELECT * FROM FA ORDER BY ID } APPEND \
    ({SELECT * FROM Bus WHERE FAID=? ORDER BY ID} RELATE ID TO PARAMETER 0) AS Bus, \
    ({SELECT * FROM Link WHERE FAID=? ORDER BY ID} RELATE ID TO PARAMETER 0) AS Link, \
    ({SELECT * FROM CompInstance WHERE FAID=? ORDER BY ID} RELATE ID TO PARAMETER 0) AS Comp"); if (!rsFA.IsOpen())
    _HR(rsFA.Open(sqlFA, &GetGraphicsDatabase(), adCmdText)); return rsFA;这段代码在程序开始调用,以后就对这个记录集操作(记录集在内存中,所以速度比较快,为了保持全局唯一,所以使用了static),最后程序结束时关闭记录集这是我们老大的做法,是不是符合你的要求?