最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

达梦(5)通过DCI实现增删改查

来源:懂视网 责编:小采 时间:2020-11-09 15:46:13
文档

达梦(5)通过DCI实现增删改查

达梦(5)通过DCI实现增删改查:达梦有仿照OCI(Oracle Call Interface)实现了一套DCI 的接口实现。具体在 DM_program p261 中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。 VS 设置: 常规 - 输出目录 - c:\dmdbms\b
推荐度:
导读达梦(5)通过DCI实现增删改查:达梦有仿照OCI(Oracle Call Interface)实现了一套DCI 的接口实现。具体在 DM_program p261 中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。 VS 设置: 常规 - 输出目录 - c:\dmdbms\b

中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。
VS 设置:

常规 -> 输出目录 -> c:\dmdbms\bin 备注: 为了省事这样弄的,实际发布时,把C:\dmdbms\bin下的.dll文件都复制过去就行了。 C/C++ -> 常规 -> 附加包含目录 -> c:\dmdbms\include 链接器 -> 附加库目录 -> c:\dmdbms\include 链接器 -> 附加依赖项 -> dmoci.lib
#include 
#include 
#include 
#include 

#include "DCI.h"

/* 声明句柄 */ 
OCIEnv *envhp; /* 环境句柄 */ 
OCISvcCtx *svchp; /* 服务环境句柄 */ 
OCIServer *srvhp; /* 服务器句柄 */ 
OCISession *authp; /* 会话句柄 */ 
OCIStmt *stmthp; /* 语句句柄 */ 
OCIDescribe *dschp; /* 描述句柄 */ 
OCIError *errhp; /* 错误句柄 */ 
OCIDefine *defhp[3]; /* 定义句柄 */ 
OCIBind *bidhp [4]; /* 绑定句柄 */ 
sb2 ind[3]; /* 指示符变量 */ 

/* 绑定select结果集的参数 */ 
text szpersonid[11]; /* 存储personid列 */ 
text szsex[2]; /* 存储sex列 */ 
text szname[51]; /* 存储name列 */ 
text szemail[51]; /* 存储mail列 */ 
text szphone[26]; /* 存储phone列 */ 
char sql[256] = {0}; /* 存储执行的sql语句*/ 

int DMDemo();

int main()
{
	DMDemo();
	system("pause");

	return 0;
}


int DMDemo()
{
 char strServerName[50]; 
 char strUserName[50]; 
 char strPassword[50]; 
 /* 设置服务器,用户名和密码 */ 
 strcpy(strServerName,"localhost"); 
 strcpy(strUserName,"SYSDBA"); 
 strcpy(strPassword,"111111"); //SYSDBA
 /* 初始化OCI应用环境*/ 
 OCIInitialize(OCI_DEFAULT, NULL, NULL, NULL, NULL); 
 /* 初始化环境句柄 */ 
 OCIEnvInit(&envhp, OCI_DEFAULT,0, 0); 
 /* 分配句柄 */ 
 OCIHandleAlloc(envhp, (dvoid**)&svchp, OCI_HTYPE_SVCCTX, 0, 0); /* 服务器环境句
柄 */ 
 OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, 0, 0); /* 服务器句柄
 */ 
 OCIHandleAlloc(envhp, (dvoid**)&authp, OCI_HTYPE_SESSION, 0, 0); /* 会话句柄 */ 
 OCIHandleAlloc(envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR, 0, 0); /* 错误句柄 */ 
 OCIHandleAlloc(envhp, (dvoid**)&dschp, OCI_HTYPE_DESCRIBE,0,0); /* 描述符句柄 */ 
 /* 连接服务器 */ 
 OCIServerAttach(srvhp, errhp,(text *)strServerName, 
 (sb4)strlen(strServerName),OCI_DEFAULT ) ; 
 /* 设置用户名和密码 */ 
 OCIAttrSet(authp,OCI_HTYPE_SESSION,(text *)strUserName, 
 (ub4)strlen(strUserName),OCI_ATTR_USERNAME,errhp); 
 OCIAttrSet(authp,OCI_HTYPE_SESSION,(text *)strPassword, 
 (ub4)strlen(strPassword), OCI_ATTR_PASSWORD,errhp); 
 /* 设置服务器环境句柄属性 */ 
 OCIAttrSet ((dvoid*)svchp, (ub4) OCI_HTYPE_SVCCTX, 
 (dvoid*)srvhp, (ub4) 0, OCI_ATTR_SERVER, errhp); 
 OCIAttrSet(svchp, OCI_HTYPE_SVCCTX,(dvoid*)authp, 
 0, OCI_ATTR_SESSION, errhp); 
 /* 创建并开始一个用户会话 */ 
 OCISessionBegin (svchp, errhp, authp,OCI_CRED_RDBMS,OCI_DEFAULT); 
 OCIHandleAlloc(envhp, (dvoid**)&stmthp,OCI_HTYPE_STMT, 0, 0); /* 语句句柄 */ 
 /************************************************************************/ 
 /* 查询person 表 */ 
 /************************************************************************/ 
 strcpy(sql, "select personid, name, phone from person.person;"); 
 /* 准备SQL 语句 */ 
 OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT); 
 /* 绑定
输出列 */ OCIDefineByPos(stmthp,&defhp[0],errhp, 1,(ub1*)szpersonid, sizeof(szpersonid),SQLT_STR,&ind[0], 0, 0, OCI_DEFAULT); OCIDefineByPos (stmthp,&defhp[1],errhp, 2,(ub1*)szname, sizeof(szname),SQLT_STR,&ind[1], 0, 0, OCI_DEFAULT); OCIDefineByPos (stmthp,&defhp[ 2],errhp, 3,(ub1*)szphone, sizeof(szphone),SQLT_STR,&ind[2], 0, 0, OCI_DEFAULT); /* 执行SQL 语句 */ OCIStmtExecute(svchp, stmthp,errhp, (ub4)0, 0, NULL, NULL, OCI_DEFAULT); printf("% -10s%-10s%-10s\n", "PERSONID", "NAME", "PHONE"); while((OCIStmtFetch( stmthp, errhp,1,OCI_FETCH_NEXT,OCI_DEFAULT))!=OCI_NO_DATA) { printf("% -10s", szpersonid); printf("% -10s", szname); printf("% -10s\n", szphone); } /************************************************************************/ /* 向person 表插入一条数据 */ /************************************************************************/ memset(sql, 0, sizeof(sql)); strcpy(sql, "insert into person.person(sex, name, email, phone) values(:sex,:name,:email,:phone);"); /* 准备SQL 语句 */ OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT); /* 绑定输入列 */ const OraText col_sex[] = ":sex"; const OraText col_name[] = ":name"; const OraText col_email[] = ":email"; const OraText col_phone[] = ":phone"; OCIBindByName(stmthp, &bidhp[0], errhp, col_sex, 4, szsex, sizeof(szsex),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); OCIBindByName(stmthp, &bidhp[1], errhp, col_name, 5, szname, sizeof(szname), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); OCIBindByName(stmthp, &bidhp[2], errhp, col_email, 6, szemail, sizeof(szemail),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); OCIBindByName(stmthp, &bidhp[3], errhp, col_phone, 6, szphone, sizeof(szphone),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); //OCIBindByName(stmthp, &bidhp[0], errhp, ":sex", 4, szsex, sizeof(szsex),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); //OCIBindByName(stmthp, &bidhp[1], errhp, ":name", 5, szname, sizeof(szname), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); //OCIBindByName (stmthp, &bidhp[2], errhp, ":email", 6, szemail, sizeof(szemail),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); //OCIBindByName (stmthp, &bidhp[3], errhp, ":phone", 6, szphone, sizeof(szphone),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); /* 设置输入参数 */ memset(szsex, 0, sizeof(szsex)); //strcpy(szsex, "M"); memcpy(szsex,"M",strlen("M")+1); memset(szname, 0, sizeof(szname)); //strcpy(szname, " 张三"); memcpy(szname,"张三",strlen("张三")+1); memset(szemail, 0, sizeof(szemail)); //strcpy(szemail, "zhangsan@dameng.com"); memcpy(szemail,"zhangsan@dameng.com",strlen("zhangsan@dameng.com")+1); memset(szphone, 0, sizeof(szphone)); memcpy(szphone,"027-87588000",strlen("027-87588000")+1); //strcpy(szphone, "027-87588000"); /* 执行SQL 语句 */ OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0,(ub4) OCI_DEFAULT); /* 提交到数据库 */ OCITransCommit(svchp, errhp, OCI_DEFAULT); /************************************************************************/ /* 更新person 表 */ /************************************************************************/ memset(sql, 0, sizeof(sql)); strcpy(sql, "update person.person set sex='M',name='Liuhuan',email='liujian@mail',phone='13636396811' WHERE personid=1"); /* 准备SQL 语句 */ OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT); /* 执行SQL 语句 */ OCIStmtExecute (svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0,(ub4) OCI_DEFAULT); /* 提交到数据库 */ OCITransCommit(svchp, errhp, OCI_DEFAULT); /************************************************************************/ /* 删除person 表的ID为的数据,首先要在数据库中存在这条记录 */ /************************************************************************/ memset(sql, 0, sizeof(sql)); strcpy(sql, "delete from person.person WHERE personid=?"); /* 准备SQL 语句 */ OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT); /* 绑定输入参数 */ memset(szpersonid, 0, sizeof(szpersonid)); memcpy(szpersonid,"20",strlen("20")+1); //strcpy(szpersonid, "20"); OCIBindByPos(stmthp, &bidhp[0], errhp, 1, szpersonid, sizeof(szpersonid),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0); /* 执行SQL 语句 */ OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0, (ub4) OCI_DEFAULT); /* 提交到数据库 */ OCITransCommit(svchp, errhp, OCI_DEFAULT); // 结束会话 OCISessionEnd(svchp, errhp, authp, (ub4) 0); // 断开与数据库的连接 OCIServerDetach(srvhp, errhp, OCI_DEFAULT); // 释放OCI句柄 OCIHandleFree((dvoid*)dschp, OCI_HTYPE_DESCRIBE); OCIHandleFree((dvoid*)stmthp, OCI_HTYPE_STMT ); OCIHandleFree((dvoid*)errhp, OCI_HTYPE_ERROR); OCIHandleFree((dvoid*)authp, OCI_HTYPE_SESSION ); OCIHandleFree(( dvoid*)svchp, OCI_HTYPE_SVCCTX); OCIHandleFree((dvoid*)srvhp, OCI_HTYPE_SERVER); return 0; }

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

达梦(5)通过DCI实现增删改查

达梦(5)通过DCI实现增删改查:达梦有仿照OCI(Oracle Call Interface)实现了一套DCI 的接口实现。具体在 DM_program p261 中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。 VS 设置: 常规 - 输出目录 - c:\dmdbms\b
推荐度:
标签: 实现 通过 删改
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top