VS2008中用OCCI连接Oracle,不需要安装Oracle客户端(常用Linux/Unix下链接数据库)

来源:互联网 发布:淘宝转化率多少安全 编辑:程序博客网 时间:2024/05/21 11:09
 VS的初学者,对它不是很熟悉,环境配置搞了无数次,太痛苦了,十分讨厌MS的安装包,又大,而且必须安装后才能用,不象Java的东西,copy过来就可以用,太烦它了。先说一下基本过程吧,
1:下载VS2008的安装包,然后一步步安装VS2008,这个过程没什么好说的,一路Next即可.
2:下载Oracle的Instant Client文件,需要注意的是,VS2008需要下载相对应的Instant Client,否则不一致时会出错的,这也是MS一个非常烦人的地方,下载地址是:http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html,在这里需要下载两个包:Instant Client Package - Basic,Instant Client Package - SDK.这两个包都要下载,第一个是基础包,里面有lib和dll文件,第二个是开发时需要的include和lib包.版本建议下载最新的版本,因为Oracle的包是向下兼容的。
3:下载OCCI的文件,http://www.oracle.com/technology/tech/oci/occi/occidownloads.html(如果前面一个地址找不到,到http://www.oracle.com/technetwork/database/occidownloads-083553.html上去下载,Oracle自己把地址更改了),下载时注意版本匹配.
4:将第2步和第3步下载的文件解压开,存放目录随意,例如3个解压开的目录分别为D:\instantclient,D:\sdk,D:\occi,然后删除掉D:\instantclient下面的oraocci11.dll oraocci11.sys两个文件,同时也把d:\sdk\lib\msvc\oraocci11.lib这个文件删除,因为这三个文件的版本是和VS2008中C++编译器版本不匹配,所以需要删除.
5:设置环境变量,把D:\occi也加到环境变量的path里面,而且它必须是第一个,同时将D:\instantclient加到环境变量path里面.
6:启动安装好的VS2008,然后将D:\sdk\include加到C++的Include目录中,将d:\sdk\lib\msvc和D:\occi这两个路径加到lib的引用路径中去.这样大体上的环境基本上配置完毕了.
7:新建一个WIN32的Console项目,然后在主类里面添加如下代码片断后进行编译,一般是没有问题的.
#include<iostream>
#include<occi.h>
using namespace oracle::occi;
using namespace std;

try
{
const string userName = "easupdate";
const string password = "easupdate";
const string connectString = "//192.168.13.67:1521/orcl";
oracle::occi::Environment *env = oracle::occi::Environment::createEnvironment("ZHS16GBK","UTF8");
{
Connection *conn = env->createConnection(
userName, password, connectString);           
Statement *stmt = conn->createStatement("select fid,fdesc_l2,fdesc_l3 from t_bas_param");
ResultSet *rs = stmt->executeQuery();
while (rs->next())
{
string l1=rs->getString(1);
string l2=rs->getString(2);
string l3=rs->getString(3);
cout <<"表空间名称:"<<l1<<"  内容:"<<l2<<"  日志:"<<l3<<endl;
}
stmt->closeResultSet(rs);
conn->terminateStatement(stmt);
env->terminateConnection(conn);
}
oracle::occi::Environment::terminateEnvironment(env);
}
catch (SQLException &sqlExcp)
{
cerr <<sqlExcp.getErrorCode() << ": " << sqlExcp.getMessage() << endl;
}

上面这种做法对一般的VS项目没什么特别需要注意的地方,基本上按过程操作都可以通过,但是在实际的开发过程中需要一些GUI的界面开发,Console的应用并不能全部满足要求,目前MFC的界面控件数量太少,操作起来不方便,用CLR项目的控件就比较多了,用起来非常方便,将OCCI和CLR项目结合起来用,就可以解决GUI界面的问题了.

8:在CLR项目中使用OCCI
想法是好的,过程是痛苦的,就是CLR和OCCI共用时,试过无数次,都没成功,问题在于CLR项目用了一个自带的namespace中System这个命名空间下面Environment类,而Oracle的oracle::occi命名空间下面有一个Environment类,这个类在CLR项目的System命名空间下面也有,即命名空间冲突了,CLR项目会默认直接引用System命名空间,这样在代码中把Environment加上完整的namespace前缀,在代码编译的时候没有问题,但是在Link的时候就总是报找不到正确的createEnvironment()方法,差点没把我给气死了,后来就在项目属性中一通乱改,还是不通过,继续改,后来不知道改了什么东西就OK了.对VS不熟悉,好多配置都不清楚是做什么用的,现在也找不到是哪些地方修改过的,只好把这个项目的.vcproj文件传上来,估大家参考一下,我也试过,另外新建一个CLR的项目,然后把这两个项目的.vcproj文件进行对比,尽量把这两个文件的内容改成一样的(但不可完全一样,两个不同项目,里面还有是一些不一样的地方),然后来编译和生成应用程序,居然通过了,太神奇了..vcproj文件内容如下:
<?xml version="1.0" encoding="gb2312"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="test"
ProjectGUID="{A535ED14-06BE-4D09-983A-AC4DFC86846F}"
RootNamespace="test"
Keyword="ManagedCProj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
ManagedExtensions="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG"
MinimalRebuild="false"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="oraocci11d.lib"
LinkIncremental="2"
GenerateDebugInformation="true"
AssemblyDebug="1"
SubSystem="2"
EntryPointSymbol="main"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
ManagedExtensions="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32"
RuntimeLibrary="2"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="oraocci11.lib"
AdditionalDependencies="$(NoInherit)"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
EntryPointSymbol="main"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
<AssemblyReference
RelativePath="System.dll"
AssemblyName="System, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.Data.dll"
AssemblyName="System.Data, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.Drawing.dll"
AssemblyName="System.Drawing, Version=2.0.0.0, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.Windows.Forms.dll"
AssemblyName="System.Windows.Forms, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
<AssemblyReference
RelativePath="System.XML.dll"
AssemblyName="System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
MinFrameworkVersion="131072"
/>
</References>
<Files>
<Filter
Name="源文件"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\AssemblyInfo.cpp"
>
</File>
<File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\test.cpp"
>
</File>
</Filter>
<Filter
Name="头文件"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\Form1.h"
FileType="3"
>
<File
RelativePath=".\Form1.resX"
SubType="Designer"
>
</File>
</File>
<File
RelativePath=".\resource.h"
>
</File>
<File
RelativePath=".\stdafx.h"
>
</File>
</Filter>
<Filter
Name="资源文件"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\app.ico"
>
</File>
<File
RelativePath=".\app.rc"
>
</File>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
原创粉丝点击