vc 调用存储过程问题

jxw3000 2004-05-11 11:56:25
在vc中通过ODBC(不要ADO)调用
CREATE PROCEDURE Test
@Para1 int ,
@Para2 int ,
@Para3 int ,
@Ret int OUTPUT
AS
insert into test1 values (@Para1,@Para2,@Para3)
set @Ret = @Para1;
GO
在vc中怎么编码?请给出代码谢谢了
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
丁淇石头 2004-05-11
  • 打赏
  • 举报
回复
CDatabase * pDatabase = new CDatabase;

pDatabase->OpenEx("DSN=ODBCName;UID=***;PWD=***", 0 );

SQL.Format("exec Test %d,%d,%d,%d",Time0, Time1, Time2, Time3);

pDatabase->ExecuteSQL( SQL );

pDatabase->Close();
delete pDatabase;

//使用时应加上异常处理
lsp5i5j 2004-05-11
  • 打赏
  • 举报
回复
你把我这个代码COPY过去看一下,ODBC有点麻烦,输入输出参数都有
int SimpleGetAccordOtherprocedure(CDatabase *dbCust,char *spstring,char *resultp,int *resultplen,int *ireturn,int *nIndex,char *sUserTel,char *sOtherId,char *sOtherTel,char *sOtherSex,char *sOtherOld)
{
char spstm[512];
int ret;
HSTMT hStmt;
int totallen=0;
SDWORD cbIn1=SQL_NTS, cbIn2=SQL_NTS, cbOut=1024,cbRet=0;

ret=SQLAllocStmt(dbCust->m_hdbc, &hStmt);
if(ret!=SQL_SUCCESS && ret!=SQL_SUCCESS_WITH_INFO)
return(-3503);

if(sizeof(spstm)<=strlen(spstring))
return(-3504);
strcpy(spstm,spstring);
ret=SQLPrepare(hStmt, (UCHAR *)spstm, SQL_NTS);
if(ret!=SQL_SUCCESS && ret!=SQL_SUCCESS_WITH_INFO)
return(-3504);

ret=SQLBindParameter(hStmt,1,SQL_PARAM_OUTPUT,SQL_C_SSHORT,SQL_INTEGER, 0, 0, ireturn, 0,&cbRet);
ret=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_SSHORT,SQL_INTEGER,0, 0, nIndex, 0, &cbIn1);
ret=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, DBACCESS_MAXPARAMLEN, 0, sUserTel, DBACCESS_MAXPARAMLEN,&cbIn1);
ret=SQLBindParameter(hStmt,4,SQL_PARAM_OUTPUT,SQL_C_CHAR,SQL_CHAR, DBACCESS_MAXPARAMLEN, 0, sOtherId, DBACCESS_MAXPARAMLEN,&cbIn2);
ret=SQLBindParameter(hStmt,5,SQL_PARAM_OUTPUT,SQL_C_CHAR,SQL_CHAR, DBACCESS_MAXPARAMLEN, 0, sOtherTel, DBACCESS_MAXPARAMLEN,&cbIn1);
ret=SQLBindParameter(hStmt,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, DBACCESS_MAXPARAMLEN, 0, sOtherSex, DBACCESS_MAXPARAMLEN,&cbIn1);
ret=SQLBindParameter(hStmt,7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, DBACCESS_MAXPARAMLEN, 0, sOtherOld, DBACCESS_MAXPARAMLEN,&cbIn1);

ret=SQLExecute(hStmt);

if(ret!=SQL_SUCCESS && ret!=SQL_SUCCESS_WITH_INFO)
return(-3505); // printf("Error in execute!\n");
ret=TBSDBProcWU(hStmt,resultp,resultplen);
return ret;
}
zhaolaoxin 2004-05-11
  • 打赏
  • 举报
回复
CDatabase * pDatabase = new CDatabase;

pDatabase->OpenEx("DSN=ODBCName;UID=***;PWD=***", 0 );

CRecordset rs( pDatabase );

SQL.Format("{Test %d,%d,%d,%d}",Time0, Time1, Time2, Time3);

rs.Open( CRecordset::dynamic, SQL, CRecordset::none );

rs.GetFieldValue( (long)0, strReturn );

rs.Close();

pDatabase->Close();
delete pDatabase;
jnlon 2004-05-11
  • 打赏
  • 举报
回复
up
jxw3000 2004-05-11
  • 打赏
  • 举报
回复
传出参数怎么得到?

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧