社区
数据库
帖子详情
在VC中怎么调用一个SQL Server的存储过程?
zhang_tiger
2003-01-14 08:45:39
请大家帮忙指点一下,小弟没有用过存储过程,但现在项目中要用到。
...全文
45
7
打赏
收藏
在VC中怎么调用一个SQL Server的存储过程?
请大家帮忙指点一下,小弟没有用过存储过程,但现在项目中要用到。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
victorzou
2003-01-16
打赏
举报
回复
可返回记录,如果是返回值就要再考虑。
zhang_tiger
2003-01-15
打赏
举报
回复
好象很复杂一样,有没有更简单一点
zjing9464
2003-01-15
打赏
举报
回复
写一个专门用于ado调用存储过程的类,既方便又简单~
chenybin
2003-01-15
打赏
举报
回复
可以是普通的SQL那样
zhang_tiger
2003-01-15
打赏
举报
回复
to victorzou(春城) :
谢谢。返回记录可以这样,那如果要进行一些操作(如果删除某些记录..),有返回值时这样好象不行。
victorzou
2003-01-15
打赏
举报
回复
如果你用过Open一个表的话,你可直接把store_procedure 做参数,如下:
_recordsetptr->Open((LPCTSTR)store_procedure,(IDispatch *)m_pConnection, adOpenDynamic, adLockBatchOptimistic, adCmdUnspecified);
masterz
2003-01-14
打赏
举报
回复
// SQL Server, stored procedure , Command , Recordset, input parameter, output parameter, returned recordset from stored procedure
//execute stored procedure , get returned value, output value, and returned recordset.
#include "stdafx.h"
#import "C:\PROGRA~1\COMMON~1\System\ado\msado15.dll" rename( "EOF", "adoEOF" )
struct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
void PrintProviderError(ADODB::_ConnectionPtr pConnection);
int main(int argc, char* argv[])
{
printf("Create a adParamReturnValue for Command object to get return value of stored procedure\n");
printf("Reference :MSDN---Append and CreateParameter Methods Example (VC++)\n");
ADODB::_ConnectionPtr Conn1;
ADODB::_CommandPtr Cmd1;
ADODB::_RecordsetPtr Rs1;
ADODB::_ParameterPtr retParam= NULL;
ADODB::_ParameterPtr inParam=NULL;
ADODB::_ParameterPtr outParam=NULL;
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2 (DISP_E_PARAMNOTFOUND, VT_ERROR);
_bstr_t bstrConnect( L"driver={sql server};server=Cell;Database=zhg;UID=sa;PWD=;" );
// the following stored procedure return 12345 int value
_bstr_t bstrCreate ( L"create proc sp_AdoTest( @OutParam int OUTPUT,@InParam int ) "
L"as "
L"select @OutParam = @InParam + 10 "
L"select * from Table1"
L"return 12345" );
_bstr_t bstrSP(L"sp_Adotest" );
try
{
_bstr_t bstrEmpty;
Conn1.CreateInstance( __uuidof( ADODB::Connection ) );
Cmd1.CreateInstance( __uuidof( ADODB::Command ) );
Rs1.CreateInstance(__uuidof(ADODB::Recordset));
// Establish connection.
Conn1->ConnectionString = bstrConnect;
Conn1->Open( bstrConnect, bstrEmpty, bstrEmpty, -1 );
// Open recordset.
Cmd1->ActiveConnection = Conn1;
Cmd1->CommandText = bstrSP;
Cmd1->CommandType = ADODB::adCmdStoredProc;
retParam=Cmd1->CreateParameter(_bstr_t("Return"),ADODB::adInteger,ADODB::adParamReturnValue,sizeof(int));
Cmd1->Parameters->Append(retParam);
outParam = Cmd1->CreateParameter(_bstr_t("OutParam"),ADODB::adInteger,ADODB::adParamOutput,sizeof(int));
Cmd1->Parameters->Append(outParam);
inParam = Cmd1->CreateParameter(_bstr_t("InParam"),ADODB::adInteger,ADODB::adParamInput,sizeof(int),_variant_t( (long) 10 ));
inParam->Value=_variant_t( (long) 10 );
Cmd1->Parameters->Append(inParam);
Cmd1->Parameters->Refresh();
Cmd1->Parameters->Item[ _variant_t( _bstr_t("@InParam") ) ]->Value =_variant_t( (long) 11 );
Rs1->put_CursorLocation(ADODB::adUseClient);
Rs1->Open((_variant_t((IDispatch *) Cmd1)),vtEmpty,ADODB::adOpenStatic,
ADODB::adLockReadOnly, -1);
// Get return value of the stored procedure.adCmdUnknown
TCHAR tcbuf[1024];
long retvalue=Cmd1->Parameters->Item[(short)0]->Value;
long p2=Cmd1->Parameters->Item[(short)1]->Value;
long p3=Cmd1->Parameters->Item[(short)2]->Value;
int recordcount=0;
if(Rs1->State==ADODB::adStateClosed)
MessageBox(NULL,"no recordset is returned from the stored procedure","Information",MB_OK);
else
recordcount = Rs1->GetRecordCount();
wsprintf(tcbuf,"retvalue of the stored procedure:%d,input value:%d,output value:%d,record count :%d",retvalue,p2,p3,recordcount);
MessageBox(NULL,tcbuf,"Output",MB_OK);
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\nCOM error occurred, Source : %s \n Description : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
PrintProviderError(Conn1);
}
return 0;
}
VOID PrintProviderError(ADODB::_ConnectionPtr pConnection)
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ADODB::ErrorPtr pErr = NULL;
long nCount = 0;
long i = 0;
if( (pConnection->Errors->Count) > 0)
{
nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount -1.
for(i = 0; i < nCount; i++)
{
pErr = pConnection->Errors->GetItem(i);
printf("\n\t Error number: %x\t%s", pErr->Number, (LPCSTR)pErr->Description);
}
}
}
在ADO
中
调用
、执行
SQL
Server
中
的
存储过程
在ADO
中
调用
、执行
SQL
Server
中
的
存储过程
VC
访问
SQL
server
数据库
VC
6.0环境下访问数据库,利用的是ADO 接口,对
sql
server
数据库进行读写,
VC
人事管理系统源码
SQL
SERVER
2000
VC
人事管理系统源码
SQL
SERVER
2000
VC
人事管理系统源码
SQL
SERVER
2000
SQL
Server
2008R2
SQL
Server
2008R2
VC
中
操作ADO数据库资料.rar_
VC
ADO
sql
_
sql
server
_
vc
ado
sql
server
_
vc
sql
VC
编程封装ADO类
VC
中
利用ADO共同实现数据库的操作 在
VC
中
使用ADO开发数据库应用程序 用C++访问
SQL
Server
2000的实例
数据库
4,017
社区成员
39,807
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章