。
解决方案 »
- 如何让一个CView实际是一个CDialog
- 怎么限制从U盘复制(进和出)?
- 请问,长连接是如何来保证SOCKET链路可用的?
- 关于CFileDialog文件后缀名的问题
- 关于编写记事本的程序!
- 完成毕业设计答辩---来散一下分,感谢VC版的高手帮助
- Notorn AntiVirus 的防病警告很多,如何用软件自动发现窗口,自动关闭窗口
- 在我的一个dll 组件程序中,能否从一个接口函数中调用另一个接口的函数?
- 请问java调用外部exe文件,怎么传递参数?
- (求助帖)自己学习vc也有一年的时间了,怎么感觉对vc还不是很了解,还不能单独编程
- 将一个别人开发的控件注册后,在对话框中加入这个控件,怎么在程序中对它进行访问呢
- VC++程序员面试题目之一,你想试试吗?顶者有分!
HRESULT hr = pCmd.CreateInstance(__uuidof(Command));
if (FAILED(hr))
{
ASSERT(FALSE);
return NULL;
} pCmd->PutRefActiveConnection(AfxGetDBConnection());//设置数据库连接
if (FAILED(hr))
{
ASSERT(FALSE);
return NULL;
} _ParameterPtr pPar = pCmd->CreateParameter(_bstr_t(""),
adBinary, adParamInput, sizeof(GUID));//创建参数 ParametersPtr pParams = pCmd->GetParameters();//得到命令的参数对象指针
hr = pParams->Append(pPar);//加入参数
if (FAILED(hr))
{
ASSERT(FALSE);
return NULL;
} hr = pCmd->put_CommandText(_bstr_t("mmas98.GetUserACL"));//存储过程名
if (FAILED(hr))
{
ASSERT(FALSE);
return NULL;
} _variant_t vaUserID;
GUID2Variant(userID, vaUserID);
hr = pPar->put_Value(vaUserID);//设置参数值 if (FAILED(hr))
{
ASSERT(FALSE);
return NULL;
} int groupID;
OPERATIONID operID;
CUserACL* pUserACL = new CUserACL; try
{
// Executes the stored procedure 'GetUserACL'
_RecordsetPtr pRecordset = pCmd->Execute(&vtEmpty, &vtEmpty2, adCmdStoredProc);//adCmdStoredProc表示命令是存储过程
if (pRecordset->EOF == VARIANT_TRUE)
return NULL;
ADO是对OLD DB 的一种封装。它的使用很灵活。
关于你提到的执行一个存储过程就可以使用很多种方法。
我给出一种示例吧:// 定义ADO连接、命令、记录集变量指针
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;// 初始化COM,创建ADO连接等操作
AfxOleInit();
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
//举例:数据源名为Demo.mdb,用户名为user,密码为111
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","user","111",adModeUnknown);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}// 使用ADO创建数据库记录集
m_pRecordset.CreateInstance(__uuidof(Recordset));// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。try
{
m_pRecordset->Open("Exec Proc_Select_Demo", // 其中Proc_Select_Demo为存储过程 ,也可以执行写SQL语句
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}// 关闭记录集
m_pRecordset->Close();
m_pRecordset = NULL;多看看MSDN上的例子吧。那里的介绍很全面。