求教高手:谁能给一个c++中用ODBC API调存储过程的例子(SQL SERVER),100分相送???? 谁能给一个c++中用ODBC API调存储过程的例子,最好带输出参数(output)那种,而且输出记录不止一条。在线等待,100如不够,可以再加!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 创建存储过程create proc getdataid (@termid int,@dataid int output) as select DataID from PlotInfo where TermID=@termid order by r_index go////////////////////在查询器中,执行:declare @dataid int exec getdataid 13,@dataid output 结果:159169////////////////////用ODBC API调用: typedef unsigned long uuid; char szStr[SQLLEN]; uuid *sk; typedef struct { uuid val; SDWORD num;} Tlng; sk = new uuid[2]; meset(sk,0x00,sizeof(uuid)*2); sprintf(szStr,"{call proc getdataid(13,?)}"); SqlLonglhl(&hdsys,szStr,&sk,2,0); //调用下面数据库函数:sword DataBase::SqlLonglhl(struct Handle_Data *hd, char *szSql,uuid *pdata,int n,int flag){ Sleep(MINSLEEP); UDWORD crow,i; UWORD *rtn; HSTMT hstmtU=NULL; RETCODE retcode=1; Tlng *ap = new Tlng [n]; rtn = new UWORD [n]; memset(ap,0x00,sizeof(Tlng)*n); SetupConnect(hd,LBaseHost);//连接数据库,调试时成功 if( hd->hstmt == NULL) SQLAllocHandle(SQL_HANDLE_STMT,hd->hdbc,&hd->hstmt); retcode = SQLSetStmtOption(hd->hstmt, SQL_BIND_TYPE, sizeof(Tlng)); retcode = SQLSetStmtOption(hd->hstmt, SQL_ROWSET_SIZE, n); retcode = SQLPrepare(hd->hstmt,(UCHAR *)szSql,SQL_NTS); //此处出错 retcode = SQLExecute(hd->hstmt); retcode = SQLBindParameter(hd->hstmt, 1, SQL_PARAM_OUTPUT,SQL_C_LONG,SQL_INTEGER, 0, 0, &ap[0].val, 0, &ap[0].num); retcode = SQLExtendedFetch(hd->hstmt, SQL_FETCH_NEXT,0, &crow,rtn); //if(retcode<0) SqlErrMsg(henvrpc,hdbcrpc, hstmtU,"RPC fetch num"); SQLFreeHandle(SQL_HANDLE_STMT, hd->hstmt); hd->hstmt = NULL; if( retcode >= 0 && crow <= (UWORD)n ) { for( i= 0; i<crow; i++) pdata[i] = ap[i].val; } delete [] ap; delete [] rtn; return crow;} 请专家答疑,高分相送!! 文件读写的问题 如何将从摄像头上抓取的数据保存成avi文件 directshow配置问题 关于WinExec的问题. 上位机和下位机串口通信,传输数据前先握手准备的问题? [高分求助]怎样调用SCRIPT CONTROL的AddObject方法 获取焦点 vc断言请教,高手请进(100分) 文件传输速率 怎么样把的附件中的录音机程序的原码显示出来? 100分求邮件发送源代码,不够可以加. 100 分求助!!!!!!!!!!!!!!!!!!!!
create proc getdataid (@termid int,@dataid int output)
as
select DataID from PlotInfo where TermID=@termid order by r_index
go////////////////////在查询器中,执行:
declare @dataid int
exec getdataid 13,@dataid output
结果:
159
169////////////////////
用ODBC API调用:
typedef unsigned long uuid;
char szStr[SQLLEN];
uuid *sk;
typedef struct
{
uuid val;
SDWORD num;
} Tlng; sk = new uuid[2];
meset(sk,0x00,sizeof(uuid)*2);
sprintf(szStr,"{call proc getdataid(13,?)}");
SqlLonglhl(&hdsys,szStr,&sk,2,0);
//调用下面数据库函数:
sword DataBase::SqlLonglhl(struct Handle_Data *hd, char *szSql,uuid *pdata,int n,int flag)
{
Sleep(MINSLEEP);
UDWORD crow,i;
UWORD *rtn;
HSTMT hstmtU=NULL;
RETCODE retcode=1;
Tlng *ap = new Tlng [n];
rtn = new UWORD [n];
memset(ap,0x00,sizeof(Tlng)*n);
SetupConnect(hd,LBaseHost);//连接数据库,调试时成功
if( hd->hstmt == NULL)
SQLAllocHandle(SQL_HANDLE_STMT,hd->hdbc,&hd->hstmt);
retcode = SQLSetStmtOption(hd->hstmt, SQL_BIND_TYPE, sizeof(Tlng));
retcode = SQLSetStmtOption(hd->hstmt, SQL_ROWSET_SIZE, n); retcode = SQLPrepare(hd->hstmt,(UCHAR *)szSql,SQL_NTS); //此处出错
retcode = SQLExecute(hd->hstmt);
retcode = SQLBindParameter(hd->hstmt, 1, SQL_PARAM_OUTPUT,SQL_C_LONG,SQL_INTEGER, 0, 0, &ap[0].val, 0, &ap[0].num);
retcode = SQLExtendedFetch(hd->hstmt, SQL_FETCH_NEXT,0, &crow,rtn);
//if(retcode<0) SqlErrMsg(henvrpc,hdbcrpc, hstmtU,"RPC fetch num");
SQLFreeHandle(SQL_HANDLE_STMT, hd->hstmt);
hd->hstmt = NULL;
if( retcode >= 0 && crow <= (UWORD)n )
{
for( i= 0; i<crow; i++) pdata[i] = ap[i].val;
}
delete [] ap;
delete [] rtn;
return crow;} 请专家答疑,高分相送!!