注册
sqlapi++动态库适配达梦(WIN_32)
专栏/知行者/ 文章详情 /

sqlapi++动态库适配达梦(WIN_32)

一抹夏忧 2022/05/05 1949 2 0
摘要 SQLAPI 、WIN32,OCI

一、简介
SQLAPI是一个C访问SQL数据库类库,主要用于访问多个SQL数据库,包括Oracle、SQL server、SQLbase、MySQL、odbc等,提供了一个低级接口,允许开发人员访问特定的数据库功能,使用SQLAPI库开发的程序可以快速的运行。此文主要讲解以下内容:
1、SQLAPI
源代码库window环境上的sqlapi库的生成;
2、测试demo,通过oci接口,利用SQLAPI库连接DM。
二、代码修改说明
SQLAPI\src\ora8API.cpp 文件中:
1、static const SAChar *g_sORA8DLLNames = _TSA(“dci.dll”);
修改为:static const SAChar *g_sORA8DLLNames = _TSA(“dci.dll”);–加载达梦的oci库
2、SALibraryFuncionAssert(this->OCIResultSetToStmt != NULL, _TSA(“OCIResultSetToStmt”));
达梦不支持的oci方法需要注释掉,暂时先绕过。同理的OCILobGetLength、OCILobRead2、OCIReset等方法达梦也不支持。
三、编译
进入 到SQLAPI\bin目录,执行sqlapi_msvc.bat即可:执行成功后,会有四种编译产物。
1、动态库位于SQLAPI\bin目录下 :sqlapid.dll(debug版本)、sqlapi.dll(release版本)
2、静态库位于D:\SQLAPI\目录下:sqlapid.lib(debug版本)、sqlapi.lib(release版本)、sqlapisd.lib、sqlapis.lib
四、SAMPLE中示例连接DM的demo程序
在samples测试用例中有好多用例。这里,我们只选择makefile默认程序sqltest.cpp的做处理。
1、打开“Visual Studio 2010命令提示”终端 (在开始- Microsoft Visual Studio 2010 中)
2、进入samples
3、执行sqltest_mvc.bat
生产文件在samples中,文件名是sqltestsd.exe
1.2执行sqltestsd.exe,如图
Image 7.png
成功连接上达梦数据库;
五、WIN上VS2010创建demo工程,连接DM
创建工程为空项目,项目的目录结构如下:
Image 8.png
(一)编译属性配置
1、编译平台选择WIN32
2、链接器设置
1、项目-> 属性-> 链接器 -> 常规 -> 附加库目录 …\sqlapi\Debug
2、项目-> 属性-> 链接器 -> 输入 -> 附加依赖项 sqlapid.lib
(二)添加文件
1、创建testapi_demo.cpp 测试demo文件,通过Oracle的方式连接达梦数据库;
#include <stdio.h> // for printf
#include “SQLAPI.h” // main SQLAPI

int main(int argc, char* argv[])
{
SAConnection con;
SACommand cmd;
try{
con.Connect(“...”, “SYSDBA”, “SYSDBA”,SA_Oracle_Client);
printf(“We are connected!\n”);
cmd.setConnection(&con);
cmd.setCommandText(“create table dl_fund_stk_tmp_chg(SERIAL int ,CURRENCYTYPE char(1));”);
cmd.Execute();
cmd.setCommandText(“insert into dl_fund_stk_tmp_chg(SERIAL,CURRENCYTYPE) values (:1,:2);”);
cmd.Param(1).setAsULong() = 1;
cmd.Param(2).setAsLongChar() = ‘0’;
cmd.Execute();
// 提交当前事务
con.Commit();
printf(“Table created, inserted!\n”);
cmd.setCommandText(“Select * from dl_fund_stk_tmp_chg;”);
cmd.Execute();
while(cmd.FetchNext()){
printf(“Row fetched: SERIAL= %ld, CURRENCYTYPE = ‘%s’\n”,cmd.Field(“SERIAL”).asLong(),(const char*)cmd.Field(“CURRENCYTYPE”).asString());
};
printf(“Rows selected!\n”);
// drop table
cmd.setCommandText(“drop table dl_fund_stk_tmp_chg;”);
cmd.Execute();
printf(“Table drop!\n”);
con.Disconnect();
printf(“We are disconnected!\n”);
}catch(SAException &x)
{try{
con.Rollback();}catch(SAException &)
{}printf(“%s\n”, (const char*)x.ErrText());
}
return 0;
}
2、编译成功。
3、运行该程序。
Image 10.png
解决方法:将sqlapid.dll拷贝到当前目录下,再次运行程序报错:
Image 11.png
解决方法:需要经dmoci的动态库拷贝拷贝到的当前目录下,至此程序运行成功。
Image 12.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服