达梦(5)通过DCI实现增删改查
达梦有仿照OCI(Oracle Call Interface)实现了一套DCI 的接口实现。具体在 DM_program p261 中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。 VS 设置: 常规 - 输出目录 - c:\dmdbms\bin 备注: 为了省事这
达梦有仿照OCI(Oracle Call Interface)实现了一套DCI 的接口实现。具体在 > p261
中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。
VS 设置:
常规 -> 输出目录 -> c:\dmdbms\bin
备注: 为了省事这样弄的,实际发布时,把C:\dmdbms\bin下的.dll文件都复制过去就行了。
C/C++ -> 常规 -> 附加包含目录 -> c:\dmdbms\include 链接器 -> 附加库目录 -> c:\dmdbms\include 链接器 -> 附加依赖项 -> dmoci.lib
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <malloc.h> #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; }

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

Menyedari kesan animasi cinta melalui kod Java Dalam bidang pengaturcaraan, kesan animasi adalah sangat biasa dan popular. Pelbagai kesan animasi boleh dicapai melalui kod Java, salah satunya ialah kesan animasi jantung. Artikel ini akan memperkenalkan cara menggunakan kod Java untuk mencapai kesan ini dan memberikan contoh kod khusus. Kunci untuk merealisasikan kesan animasi jantung ialah melukis corak berbentuk hati dan mencapai kesan animasi dengan menukar kedudukan dan warna bentuk jantung. Berikut ialah kod untuk contoh mudah: importjavax.swing.

Bahasa pengaturcaraan PHP ialah alat yang berkuasa untuk pembangunan web, yang mampu menyokong pelbagai logik dan algoritma pengaturcaraan yang berbeza. Antaranya, melaksanakan jujukan Fibonacci adalah masalah pengaturcaraan biasa dan klasik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk melaksanakan jujukan Fibonacci, dan melampirkan contoh kod tertentu. Jujukan Fibonacci ialah jujukan matematik yang ditakrifkan seperti berikut: unsur pertama dan kedua bagi jujukan ialah 1, dan bermula dari unsur ketiga, nilai setiap unsur adalah sama dengan jumlah dua unsur sebelumnya. Beberapa elemen pertama urutan

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Dengan populariti perisian sosial dan penekanan yang semakin meningkat terhadap privasi dan keselamatan orang ramai, fungsi klon WeChat telah beransur-ansur menjadi tumpuan perhatian. Fungsi klon WeChat boleh membantu pengguna log masuk ke berbilang akaun WeChat pada telefon mudah alih yang sama pada masa yang sama, menjadikannya lebih mudah untuk diurus dan digunakan. Tidak sukar untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Anda hanya perlu mengikuti langkah berikut. Langkah 1: Pastikan versi sistem telefon mudah alih dan versi WeChat memenuhi keperluan Pertama, pastikan versi sistem telefon mudah alih Huawei anda telah dikemas kini kepada versi terkini, serta Apl WeChat.

"Cadangan Pembangunan: Cara Menggunakan Rangka Kerja ThinkPHP untuk Melaksanakan Tugas Asynchronous" Dengan perkembangan pesat teknologi Internet, aplikasi Web mempunyai keperluan yang semakin tinggi untuk mengendalikan sejumlah besar permintaan serentak dan logik perniagaan yang kompleks. Untuk meningkatkan prestasi sistem dan pengalaman pengguna, pembangun sering mempertimbangkan untuk menggunakan tugas tak segerak untuk melaksanakan beberapa operasi yang memakan masa, seperti menghantar e-mel, memproses muat naik fail, menjana laporan, dsb. Dalam bidang PHP, rangka kerja ThinkPHP, sebagai rangka kerja pembangunan yang popular, menyediakan beberapa cara mudah untuk melaksanakan tugas tak segerak.

Panduan Pelaksanaan Keperluan Permainan PHP Dengan populariti dan perkembangan Internet, pasaran permainan web menjadi semakin popular. Ramai pembangun berharap untuk menggunakan bahasa PHP untuk membangunkan permainan web mereka sendiri, dan melaksanakan keperluan permainan adalah langkah utama. Artikel ini akan memperkenalkan cara menggunakan bahasa PHP untuk melaksanakan keperluan permainan biasa dan menyediakan contoh kod khusus. 1. Cipta watak permainan Dalam permainan web, watak permainan adalah elemen yang sangat penting. Kita perlu mentakrifkan atribut watak permainan, seperti nama, tahap, nilai pengalaman, dll., dan menyediakan kaedah untuk mengendalikannya

Dalam bidang pembangunan perisian hari ini, Golang (bahasa Go), sebagai bahasa pengaturcaraan yang cekap, ringkas dan sangat bersesuaian, semakin digemari oleh pembangun. Perpustakaan standardnya yang kaya dan ciri-ciri konkurensi yang cekap menjadikannya pilihan berprofil tinggi dalam bidang pembangunan permainan. Artikel ini akan meneroka cara menggunakan Golang untuk pembangunan permainan dan menunjukkan kemungkinan besarnya melalui contoh kod tertentu. 1. Kelebihan Golang dalam pembangunan permainan Sebagai bahasa yang ditaip secara statik, Golang digunakan dalam membina sistem permainan berskala besar.

Melaksanakan operasi pembahagian yang tepat di Golang adalah keperluan biasa, terutamanya dalam senario yang melibatkan pengiraan kewangan atau senario lain yang memerlukan pengiraan ketepatan tinggi. Operator bahagian terbina dalam Golang "/" dikira untuk nombor titik terapung, dan kadangkala terdapat masalah kehilangan ketepatan. Untuk menyelesaikan masalah ini, kami boleh menggunakan perpustakaan pihak ketiga atau fungsi tersuai untuk melaksanakan operasi pembahagian yang tepat. Pendekatan biasa ialah menggunakan jenis Tikus daripada pakej matematik/besar, yang menyediakan perwakilan pecahan dan boleh digunakan untuk melaksanakan operasi pembahagian yang tepat.
