vc里面调用sqlserver存储过程如何调用?

luh 2003-08-23 02:18:25
ji啊
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
luh 2003-08-23
  • 打赏
  • 举报
回复
我现在代码

::CoInitialize(NULL);
_ConnectionPtr pConn;
pConn.CreateInstance(_uuidof(Connection));
pConn->Open("Provider = SQLOLEDB.1;Initial Catalog=sql;
Data Source=201.123.133.123","sa" ,"",
adOpenUnspecified);

_CommandPtr Cmd1;
_RecordsetPtr Rs1;
_variant_t Final;

Cmd1.CreateInstance( __uuidof( Command ) );
Cmd1->ActiveConnection = pConn;
Cmd1->CommandText = _bstr_t(L"sp_cal_in");;
Cmd1->CommandType = adCmdStoredProc;
Cmd1->Parameters->Refresh();

Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value
= _variant_t((LPCTSTR)"345678");
Cmd1->Parameters->Item[ _variant_t( (long) 2 ) ]->Value
= _variant_t((LPCTSTR)"00E04c7713E7");
Cmd1->Parameters->Item[ _variant_t( (long) 3 ) ]->Value
= _variant_t( (long) 1);
Cmd1->Parameters->Item[ _variant_t( (long) 4 ) ]->Value
= _variant_t( (long)0);
Cmd1->Parameters->Item[ _variant_t( (long) 5 ) ]->Value
= _variant_t( (long)121301);
Cmd1->Parameters->Item[ _variant_t( (long) 6 ) ]->Value
= _variant_t( (long)0);
Cmd1->Parameters->Item[ _variant_t( (long) 7 ) ]->Value
= _variant_t((LPCTSTR)"null");
Cmd1->Parameters->Item[ _variant_t( (long) 8 ) ]->Value
= _variant_t((LPCTSTR)"null");
Cmd1->Parameters->Item[ _variant_t( (long) 9 ) ]->Value
= _variant_t((long)index);
Cmd1->Parameters->Item[ _variant_t( (long) 10 )]->Value
= _variant_t((LPCTSTR)ErrInfo);

Cmd1->Execute( &vtEmpty, &vtEmpty2, adCmdUnknown);


我这样执行以后到最后 Execute还是出现了异常
大侠们帮我分析一下吧
是不是我这样写参数不对
最后两个参数是输出参数
luh 2003-08-23
  • 打赏
  • 举报
回复
m_commandptr是什么东东
我改成
Cmd1最后执行出现异常
思危 2003-08-23
  • 打赏
  • 举报
回复
未调、试试先
思危 2003-08-23
  • 打赏
  • 举报
回复
::CoInitialize(NULL);
_ConnectionPtr pConn;
pConn.CreateInstance(_uuidof(Connection));
pConn->Open("Provider = LOLEDB.1;
InitialCatalog=aa;
DataSource=201.123.133.123",
"sa","",adOpenUnspecified);

_bstr_t bstrProc =( L"proc" );; //Stored procedure name
_CommandPtr Cmd1; // command object pointer
Cmd1.CreateInstance( __uuidof( Command ) ); // creating command object
Cmd1->ActiveConnection = Conn1; // giving the connection handle
Cmd1->CommandText = _bstr_t( bstrProc ); // passing the stored procedue
Cmd1->CommandType = adCmdStoredProc; // type
Cmd1->Parameters->Refresh(); // passing string value as argument to stored procedure

int a = 1; //输入参数
int b = 0; //输出参数
Cmd1->Parameters->Append(m_commandptr->CreateParameter("code",adInteger,adParamInput,sizeof(int),_variant_t(a));
Cmd1->Parameters->Append(m_commandptr->CreateParameter("code",adInteger,adParamOutput,sizeof(int),_variant_t(b));

Cmd1->Execute(&vtEmpty, &vtEmpty2, adCmdUnknown ); // executing the stored procedure and storing the recordset value
luh 2003-08-23
  • 打赏
  • 举报
回复
我的代码是这样
::CoInitialize(NULL);
_ConnectionPtr pConn;
pConn.CreateInstance(_uuidof(Connection));
pConn->Open("Provider = LOLEDB.1;
InitialCatalog=aa;
DataSource=201.123.133.123",
"sa","",adOpenUnspecified);
pConn->Execute(proc(a,b),0,adCmdUnknown);

是这样的,a 是输入参数,
b是输出参数
我这段语法不知道怎么写
我想得到b得值
没有输出参数的情况下是能调用的
思危 2003-08-23
  • 打赏
  • 举报
回复
见:
http://www.vckbase.com/article/mfc_database/0152692838.htm

有示例代码
思危 2003-08-23
  • 打赏
  • 举报
回复
ADO使你能够在客户程序中通过数据提供者来方便地处理数据.ADO主要的优点是容易使用、高速、低内存、磁盘占用
在本文的示例工程中我们可以执行存储过程,传递参数给存储过程并接收它的返回值,以下是此过程的主要代码。


{
CString strTmp;

CString m_sdatasource; // Data source name
CString m_sUserID; // User Id
CString m_sPassword; // Password

// GET the above values from the user
//Without creating Datasource we can use database by the following code
/* strTmp.Format( "driver={sql server};"
"server=%s;"
"Database=%s;""UID=%s;""PWD=%s;",
m_server,m_sdatabase,m_sUserID,m_sPassword );*/

strTmp.Format( "dsn=%s;""UID=%s;""PWD=%s;",m_sdatasource,m_sUserID,m_sPassword );
_bstr_t bstrSQLServerConnect;
_bstr_t bstrProc =( L"sp_StartByteImport" );; //Stored procedure name
_variant_t Final;
bstrSQLServerConnect = (LPCTSTR) strTmp;
m_status="Empty File";
_ConnectionPtr Conn1; // connection object pointer
_CommandPtr Cmd1; // command object pointer
_RecordsetPtr Rs1; // recordset object pointer
bool bvalid = false;
try
{
Conn1.CreateInstance( __uuidof( Connection ) ); // Instantiating connection object
Conn1->ConnectionString = bstrSQLServerConnect; // giving the sqlconnection
Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty ); // open the connection object
Cmd1.CreateInstance( __uuidof( Command ) ); // creating command object
Cmd1->ActiveConnection = Conn1; // giving the connection handle
Cmd1->CommandText = _bstr_t( bstrProc ); // passing the stored procedue
Cmd1->CommandType = adCmdStoredProc; // type
Cmd1->Parameters->Refresh(); // passing string value as argument to stored procedure
Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value = _variant_t( (LPCTSTR)m_sfilename );
Rs1 = Cmd1->Execute( &vtEmpty, &vtEmpty2, adCmdUnknown ); // executing the stored procedure and storing the recordset value
bvalid = true;
Final = Rs1->Fields->GetItem( _variant_t( 0L ) )->Value; // getting the first column value of the result row
strTmp.Format( "%s", CrackStrVariant( Final) ); // to see the value
// put your code to see all column values
}
catch( CException *e ) // trapping all error messages
{
TCHAR szCause[255];
e->GetErrorMessage(szCause, 255);
m_status=szCause;
}
catch( _com_error &e )
{
m_status=e.ErrorMessage( );
}
catch(...)
{
m_status="Error while executing the Import";

}
//we need to create the stored procedures below before running the application
//CREATE PROCEDURE sp_AddAccountingInfo @nfinal int, @pcDate datetime,
//@pcURL varchar (250), @pcTop varchar (250),
//@pcQueryString varchar (250), @pcBytes int, @pcRequests int AS
/*
Do your operation here
*/
//CREATE PROCEDURE sp_AddAccountingInfo
//@nfinal int,
//@pcDate datetime,
//@pcURL varchar (250),
//@pcTop varchar (250),
//@pcQueryString varchar (250),
//@pcBytes int,
//@pcRequests int
//AS
/*
Put your code here
*/
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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