博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SQL】使用调用层接口
阅读量:5983 次
发布时间:2019-06-20

本文共 2541 字,大约阅读时间需要 8 分钟。

只记录C语言相关的,java相关的JDBC和PHP相关的都先跳过。

C相关的也只是记录一下,这里面的语句我都不知道如何运行,在我的vs2010里面连头文件都找不到... 我觉得这里只是讲解了一下基本的原理,具体的还跟我们采用哪一个数据库有关。

 

用C和SQL/CLI编写的程序能够创建和处理四种记录:

1.环境记录(SQLHENV):为连接做准备

2.连接记录(SQLHDBC):连接应用程序和数据库

3.语句记录(SQLHSTMT):SQL语句信息

4.描述记录(SQLHDESC):保存元组或参数的信息。一般不可见。

 

创建记录:

SQLAllocHandle(hType, hIn, hOut);

hType:表示希望的句柄类型。SQL_HANDLE_ENV表示新的环境;SQL_HANDLE_DBC表示新的连接;SWL_HANDLE_STMT表示新的语句。

hIn:是高层元素的句柄,如果要得到新的环境句柄则这里填入SQL_NULL_HANDLE

hOut:创建的句柄的地址

返回值:一个SQLRETURN(整数)类型的值。0表示成功,非0为出错。

#include "sqlcli.h"SQLHENV myEnv;SQLHDBC myCon;SQLHSTMT execStat;SQLRETURN errorCode1, errorCode2, errorCode3;errorCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);if(!errorCode1){    errorCode2 = SQLAllocHandle(SQL_HANDLE_DBC, SQL_HANDLE_ENV, &myCon);}if(!errorCode2){    errorCode3 = SQLAllocHandle(SQL_HANDLE_STMT, SQL_HANDLE_DBC, &myCon);}

 

 

进程语句

SQLPrepare(sh, st, sl);//作用是使句柄sh代表特定的SQL语句st

sh:语句句柄

st:SQL语句

sl:st的长度,如果不知道可以使用SQL_NTS通知SQLPrepare从字符串本身计算出长度。

SQLExecute(sh);  //执行句柄sh代表的语句

SQLPrepare(execStat, "SELECT netWorth FROM MovieExec",SQL_NTS);SQLExecute(execStat);

 

上面两句代码可以合成一句:

SQLExecDirect(execStat, "SELECT netWorth FROM MovieExec", SQL_NTS);

 

 

 

从查询结果中取数据

与PSM中FETCH命令相当的函数是

SQLFetch(sh);

返回值是SQLRETURN类型,表明是否成功。

把分量绑定到宿主语言变量:

SQLBindCol(sh,colNo,colType,pVar,varSize,varInfo)

sh:语句的句柄

ColNo要获得的元素的值的(元组内)分量的数目

colType:代码,表示存放的分量值的变量类型。如SQL_CHAR、SQL_INTEGER

pVar:指针,存放值的变量

varSize:pVar指向的变量值的字节长度

varInfo:整型指针,用于提供输出值附加信息。

#include "sqlcli.h"void worthRanges(){    int i, digits, counts[15];    SQLHENV myEnv;    SQLHDBC myCon;    SQLHSTMT execStat;    SQLINTEGER worth, worthInfo;    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);    SQLAllocHandle(SQL_HANDLE_DBC, SQL_HANDLE_ENV, &myCon);    SQLAllocHandle(SQL_HANDLE_STMT, SQL_HANDLE_DBC, &execStat);    SQLPrepare(execStat, "SELECT netWorth FROM MovieExec", SQL_NTS);    SQLExecute(execStat);    SQLBindCol(execStat, 1, SQL_INTEGER, &worth, sizeof(worth), &worthInfo);    for(i = 1; i < 15; i++)        counts[i] = 0;    while(SQLFetch(execStat) != SQL_NO_DATA)    {        digits = 1;        while((worth/=10) >0) digits++;        if(digits <= 14) counts[digits]++;    }    for(i = 1; i < 15; i++)    {        printf("digits = %d: number of execs = %d\n", i, counts[i]);    }}

 

 

向查询传递参数:

1.用SQLPrepare准备语句,参数部分用问号代替

2.SQLBindParameter将值绑定到有问号的地方,有10个参数。

3.调用SQLExecute来执行带绑定的查询

SQLPrepare(myStat, "INSERT INTO Studio(name, address) VALUES(?, ?)", SQL_NTS);SQLBindParameter(myStat,1, ..., studioName, ...);SQLBindParameter(myStat,2, ..., studioAddr, ...);SQLExecute(myStat);

 

转载地址:http://eqeox.baihongyu.com/

你可能感兴趣的文章
浅谈关于特征选择算法与Relief的实现
查看>>
mybatis-spring 项目简介
查看>>
Wireshark抓取RTP包,还原语音
查看>>
Behavioral模式之Memento模式
查看>>
Work Management Service application in SharePoint 2016
查看>>
Dos 改动IP 地址
查看>>
Laravel 源码解读:php artisan make:auth
查看>>
【转】ionic run android 成功launch success,但是genymotion虚拟机没有显示
查看>>
苹果在GitHub上正式开源iOS内核源码
查看>>
测试人员面临的测试挑战和必备技能
查看>>
使用Flutter之后,我们的CPU占用率降了50%
查看>>
同事反馈环:为什么度量和会议还不够充分
查看>>
[转]十问 Linux 虚拟内存管理 (glibc)
查看>>
老司机带你深入浅出 Collection
查看>>
查询系统-vba
查看>>
[译]Spring Session 与 Spring Security
查看>>
python学习笔记(05)
查看>>
JAVA BIO 服务器与客户端实现示例
查看>>
《Cisco IPv6网络实现技术(修订版)》一2.6 配置练习:使用Cisco路由器配置一个IPv6网络...
查看>>
《可穿戴创意设计:技术与时尚的融合》一一第2章 与可穿戴设备有关的故事...
查看>>