ODBC API开发教程 - 图文(7)

2019-09-01 12:04

SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER ColumnSize, SQLSMALLINT DecimalDigits, SQLPOINTER ParameterValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_IndPtr); StatementHandle:执行SQL语句STMT句柄。

ParameterNumber:指明要将变量与第几个参数绑定,从1开始计算。

InputOutputType:指明是输入还是输出参数。可以取值的范围为:SQL_PARAM_INPUT,SQL_PARAM_OUTPUT ,SQL_PARAM_INPUT_OUTPUT。 ValueType:指明用于和参数绑定的C语言数据类型。 ParameterType:指明在存储过程中ODBC数据类型。

ColumnSize:指明接收数据的宽度,对于字符串和结构需要指明数据的宽度,而对于普通的变量如SQLINTEGER,SQLFLOAT等设置为0就可以了。

DecimalDigits :当数据类型为SQL_NUMERIC,SQL_DECIMAL时指明数字小数点的精度,否则填0。

ParameterValuePtr:在作为输入参数指明参数的指针,在作为输出参数时指明接收数据的变量指针。

BufferLength:指明参数指针所指向的缓冲区的字节数大小。对于字符串和结构需要指明大小,而对于普通的变量如SQLINTEGER,SQLFLOAT等设置为0就可以了。

StrLen_or_IndPtr:作为输入参数时指明数据的字节数大小,对于普通的定长变量如

SQLINTEGER,SQLFLOAT等设置为0就可以了,对于字符号串需要在此参数中指定字符串数据的长度,或者设置为SQL_NULL_DATA表明此参数为空值,或者设置为SQL_NTS表明字符串以NULL字符结尾,对于结构需要指明结构的长度。当作为输出参数时,当SQL执行完毕后会在这个参数中返回拷贝的缓冲区的数据的字节数。

2.5.4.1 例子一:调用含有输出参数的存储过程

在SQL Server中建立存储过程: create proc p_f

@myid int output,@myname varchar(20) output,@mytall float output,@mytall2 dec(30,10) output,

@inid int,@inname varchar(10),@intall float,@intall2 dec(30,10) as

print 'do it'

set @myid=1+isnull(@inid,-1)

set @myname='test'+isnull(@inname,'_NULL') set @mytall=100.100 + @intall set @mytall2=100.100 + @intall2 return 1024

这个存储过程的前四个参数是输出参数,后四个参数是输入参数。并且最后返回1024作为返回值。四个参数分别是不同的数据类型:整数,字符串,浮点数和带有10位小数的30位数字。

这个例子中我们不使用后面四个参数,只演示输出参数的使用方法,后四个输出参数直接在SQL语句中指定,程序代码如下。 void OnTestP4() {

//省略分配句柄和连接数据库的部分

SQLCHAR szOutput[40],szOutput2[40]; SQLINTEGER iOutput=0,iReturnVal=0; SQLFLOAT fOutput=0; //只使用输出参数

SQLCHAR szSQL[100]=\p_f(?,?,?,?,1,'_OK',1000.001,1000.001)}\

//用于保存各个返回的输出参数的字节数 SQLINTEGER cb1,cb2,cb3,cb4,cb5; //分配STMT句柄

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);

//绑定参数

retcode = SQLBindParameter(hstmt1, 1, SQL_PARAM_OUTPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &iReturnVal, 0, &cb1);

if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {

ProcessLogMessages(SQL_HANDLE_STMT, hstmt1,\ }

retcode = SQLBindParameter(hstmt1, 2, SQL_PARAM_OUTPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &iOutput, 0, &cb2);

if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {

ProcessLogMessages(SQL_HANDLE_STMT, hstmt1,\ }

retcode = SQLBindParameter(hstmt1, 3, SQL_PARAM_OUTPUT, SQL_C_CHAR,SQL_VARCHAR, 20, 0, szOutput, 20, &cb3);

if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {

ProcessLogMessages(SQL_HANDLE_STMT, hstmt1,\ }

retcode = SQLBindParameter(hstmt1, 4, SQL_PARAM_OUTPUT, SQL_C_DOUBLE,SQL_FLOAT, 0, 0, &fOutput, 0, &cb4);

if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {

ProcessLogMessages(SQL_HANDLE_STMT, hstmt1,\ }

retcode = SQLBindParameter(hstmt1, 5, SQL_PARAM_OUTPUT, SQL_C_CHAR,SQL_DECIMAL, 25, 10, szOutput2, 40, &cb5);

if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {

ProcessLogMessages(SQL_HANDLE_STMT, hstmt1,\ }

//执行SQL语句,调用存储过程

retcode = SQLExecDirect (hstmt1,szSQL, SQL_NTS); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {

ProcessLogMessages(SQL_HANDLE_STMT, hstmt1,\ }

else

//得到结果集 while ( ( retcode = SQLMoreResults(hstmt1) ) != SQL_NO_DATA ) ;

TRACE(%utput,szOutput2);

SQLFreeHandle(SQL_HANDLE_STMT,hstmt1); //省略释放句柄部分 }

我们现在来分别分析返回值和四个参数绑定的调用。 绑定返回值和第一个整数:

retcode = SQLBindParameter(hstmt1, 1, SQL_PARAM_OUTPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &iReturnVal, 0, &cb1); ParameterNumber =1,2

InputOutputType = SQL_PARAM_OUTPUT,指明作为输出参数。 ValueType = SQL_C_LONG,指明C语言中数据类型为 int 。 ParameterType = SQL_INTEGER,指明SQL数据类型为Integer。 ColumnSize = 0 DecimalDigits = 0

ParameterValuePtr = &iReturnVal , &iOutput 为保存返回参数的缓冲区(变量)指针。 BufferLength = 0

StrLen_or_IndPtr = &cb1,cb1未赋初值,用于得到返回参数的字节大小。 绑定第二个字符串:


ODBC API开发教程 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第三章 平面机构的运动分析 习题与答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: