如题,我用VS2003+OCCI做连接ORACLE的东西,当我运行一次之后,修改源代码就无法再生成,原因是有文件被占用,如下:------ 已启动生成: 项目: 命令行数据库连接, 配置: Debug Win32 ------正在链接...
LINK : fatal error LNK1168: 无法打开 Debug/命令行数据库连接.exe 进行写入生成日志保存在“file://f:\Project\Visual Studio 2003 Project\命令行数据库连接\Debug\BuildLog.htm”中
命令行数据库连接 - 1 错误,0 警告
---------------------- 完成 ---------------------    生成: 0 已成功, 1 已失败, 0 已跳过直接删除也提示文件正在使用,不知道这个是我写的代码结束连接的问题,还是其他的哪里问题?有没有哪位大侠遇到过?
我的代码:
#include "Stdafx.h"
#include <iostream>
#include <occi.h>using namespace std;
using namespace oracle::occi; Environment *env;
Connection *conn;
Statement *stmt;
ResultSet *rset;
string tableName;
string typeName;void main()
{
Environment * env=Environment::createEnvironment(Environment::DEFAULT);
cout << "Ready, let's go!" << endl; cout << "Trying" << endl;
Connection *conn=env->createConnection("broadsky","111111","");
cout << "Done!" << endl;
if (conn)
cout << "SUCCESS - createConnection" <<"\tconn="<<conn<< endl;
else
cout << "FAILURE - createConnection" <<"\tconn="<<conn<<endl;
stmt = conn->createStatement("SELECT * FROM t1");
rset=stmt->executeQuery();
while (rset->next())
    {
cout<<"the empno is:"<<rset->getString(1)<<"\t"<<rset->getString(2)<<"\t";
cout<<rset->getString(3)<<"\t"<<rset->getString(4)<<"\t"<<rset->getString(5)<<"\t"<<endl;
    }
stmt->closeResultSet (rset);
    conn->terminateStatement (stmt);
env->terminateConnection (conn);
Environment::terminateEnvironment(env);
system("PAUSE");
}

解决方案 »

  1.   

    运行之后进程没杀掉吧?用任务管理器把那个exe杀掉都不行嘛?那就重启机器。感觉是exe文件没有退出还在内存中,所以无法覆盖。
      

  2.   

    进程已经KILL掉了,还是无法删除,不会是需要每次试运行之后都重启下机器吧太悲哀了~
      

  3.   

    肯定不用,原因是什么暂时还不清楚。
    vc里面terminateConnection 就是closeConnection吗?另外
       system("PAUSE");
    是不是代表退出?
    vc里面的内存释放要及时吧。我觉得应该是代码或者编译器的问题,不会是数据库的问题。
      

  4.   

    嗯,是关闭连接的意思,system("PAUSE"); 是一个暂停函数,为了防止CMD一闪退出添加的,在别的程序里应用过,这句应该没问题,找了一些例子,释放句柄、内存方面该释放的也都释放了,去VC区问问~是个好主意~