您现在的位置是:首页 > 电脑技术查询 > 电脑知识

sqlbindcol

编辑:chaxungu时间:2022-09-28 09:37:22分类:电脑知识

sqlbindcol
函数功能描述:将数据缓冲绑定到结果集的列
说明:
版本引入:odbc1.0
遵从标准:iso92
功能说明:sqlbindcol将应用程序的数据缓冲绑定到结果集的各列
函数原型:sqlreturnsqlbindcol(
sqlhstmtstatementhandle,
sqlusmallintcolumnnumber,
sqlsmallinttargettype,
sqlpointertargetvalueptr,
sqlintegerbufferlength,
sqllen*strlen_or_ind);
参数:
statementhandle
[输入]声明的句柄
columnnumber
[输入]结果集里要绑定的列号。列号为从0开始递增的数字编号,第0列为书签列。如果没有使用书签╠╠就是说,sql_attr_use_bookmarks这个声明属性被置为sql_ub_off╠╠那么列号从1开始计数;
targettype
[输入]*targetvalueptr所指缓冲的c数据类型的标识符,当通过sqlfetch,sqlfetchscroll,sqlbulkoperations或sqlsetpos从数据源取得数据的时候,驱动程序将数据转换成这个类型;当通过sqlbulkoperations或sqlsetpos发送数据到数据源时,驱动程序从这个类型来转换数据。
targetvalueptr
[输入/输出]用来绑定列的数据缓冲的指针。sqlfetch和sqlfetchscroll返回数据到这个缓冲。当操作为sql_fetch_by_bookmark标识的时候sqlbulkoperations返回数据到这个缓冲。当操作为sql_add或sql_update_by_bookmark时,从这个缓冲取得数据。当操作为sql_refresh时,sqlsetpos返回数据到这个缓冲中;当操作为sql_update时,从这个缓冲取得数据。如果targetvalueptr为一空指针,驱动程序取消列到数据缓冲的绑定。应用程序可通过sql_unbind选项通过调用sqlfreestmt来取消所有列的绑定。如果sqlbindcol调用的targetvalueptr参数为空指针而strlen_or_indptr是有效的值的话,应用程序可取消列的绑定但仍然存在一个该列的长度/指示缓冲绑定。
bufferlength
[输入]*targetvalueptr指向的缓冲的字节数长度。驱动程序使用bufferlength来避免返回可变长数据如字符或二进制数时写过*targetvalueptr的边界。注意驱动程序会在返回字符数据到*targetvalueptr时计算空终止符。因此*targetvalueptr缓冲就要包括空终止符的空间,否则驱动程序会截短数据。当驱动程序返回定长数据如整形数或一个数据结构时,驱动程序会忽略bufferlength参数并判断缓冲是否足够大来接收数据。因此很重要的是应用程序要分配一个足够大的缓冲给定长数据,否则驱动程序会写过缓冲的界。当bufferlength小于0时sqlbindcol返回sqlstatehy090(无效的字符串或缓冲长度),等于0时不返回这个结果,可是,如果targettype指定为一个字符类型,应用程序就不要将bufferlength设为0,因为iso的cli-适应的驱动程序在这种情况下返回sqlstatehy090。
strlen_or_indptr
[输入/输出]指向绑定列的长度/指示缓冲。sqlfetch和sqlfetchscroll返回一个数值到这个缓冲。当操作为sql_add,sql_update_by_bookmark,或sql_delete_by_bookmark时sqlbulkoperations从这个缓冲取得一个数值。当操作为sql_fetch_by_bookmark时sqlbulkoperations返回一个数值到这个缓冲,当操作为sql_refresh时sqlsetpos返回一个数值到此缓冲;但操作为sql_update时,它从这个缓冲取回一个数值。sqlfetch,sqlfetchscroll,sqlbulkoperations,和sqlsetpos可返回以下数值到长度/指示缓冲:
l返回数据的有效长度
lsql_no_total
lsql_null_data
应用程序可下列值放入长度/指示缓冲给供sqlbulkoperations或sqlsetpos使用:
l待发送数据的长度
lsql_nts
lsql_null_data
lsql_data_at_exec
lsql_len_data_at_exec宏的结果
lsql_column_ignore
如果指示缓冲和长度缓冲是分开的缓冲区的话,指示缓冲只能返回sql_null_data,而长度缓冲可返回所有其他的值。如果strlen_or_indptr为一个空指针,那么没有可用的长度或指示值。这是当取数据且数据为null时的一个错误。
返回值:
sql_success,sql_success_with_info,sql_error,或sql_invalid_handle.
备注:此sdk函数的使用涉及到很多相关的部分,请使用者一定要认真仔细。
示例代码:
#definename_len50
#definephone_len10
sqlcharszname[name_len],szphone[phone_len];
sqlintegerscustid,cbname,cbcustid,cbphone;
sqlhstmthstmt;
sqlreturnretcode;
retcode=sqlexecdirect(hstmt,
"selectcustid,name,phonefromcustomersorderby2,1,3",
sql_nts);
if(retcode==sql_success||retcode==sql_success_with_info)
{
/*bindcolumns1,2,and3*/
sqlbindcol(hstmt,1,sql_c_ulong,&scustid,0,&cbcustid);
sqlbindcol(hstmt,2,sql_c_char,szname,name_len,&cbname);
sqlbindcol(hstmt,3,sql_c_char,szphone,phone_len,&cbphone);
/*fetchandprinteachrowofdata.on*/
/*anerror,displayamessageandexit.*/
while(true)
{
retcode=sqlfetch(hstmt);
if(retcode==sql_error||retcode==sql_success_with_info)
{
show_error();
}
if(retcode==sql_success||retcode==sql_success_with_info)
{
fprintf(out,"%-*s%-5d%*s",name_len-1,szname,
scustid,phone_len-1,szphone);
}
else
{
break;
}
}
}

上一篇:intel core 2 quad x9770

下一篇:全集成主板