_ConnectionPtr conn(__uuidof(Connection);
_CommandPtr cmdProc(__uuidof(Command));
_ParameterPtr prmIn;
....
使用commandptr类调用存储过程。
cmdProc->CommandText=L"存储过程名;
cmdProc->CommandType=adCmdStoredProc;
//设置存储过程参数
prmIn=cmdProc->CreateParameter(L"输入参数1",adChar,adParamInput,4);
prmIn->Value=参数值;
cmdProc->Parameters->Append(prmIn);
//执行存储过程
cmdProc->Execute(NULL,NULL,adCmdStoredProc);
_CommandPtr cmdProc(__uuidof(Command));
_ParameterPtr prmIn;
....
使用commandptr类调用存储过程。
cmdProc->CommandText=L"存储过程名;
cmdProc->CommandType=adCmdStoredProc;
//设置存储过程参数
prmIn=cmdProc->CreateParameter(L"输入参数1",adChar,adParamInput,4);
prmIn->Value=参数值;
cmdProc->Parameters->Append(prmIn);
//执行存储过程
cmdProc->Execute(NULL,NULL,adCmdStoredProc);
解决方案 »
- 初级问题:wchar_t *类型相+怎么写。
- 关于IOCP 工作者线程处理的一点疑问?
- 文字跟随鼠标
- 数独(九宫格) 算法请教(sudoti)
- VC调用EXCEL,如何去掉EXCEL的菜单?
- 关于<<MFC Windows 程序设计(第2版)>>与<<Windows 程序设计(第5版)>>
- 如何获得cpu序列号
- 我是一个VC初学者,请问这几句代码是什么意思?
- dcom远程可执行组件在AdviseSink时出现权限被拒绝问题,如何设置dcomcnfg或注册表可使VB的客户端的能挂入事件.
- RELEASE和DEBUG后运行得到的结果不一样
- 高手:where are you? i need your help????
- >>>???<<<请教高手: ComboBox控件是不是可以像Edit一样根据设定的字体调整占用的空间?
#include <tchar.h>
#include "myDB.h"CMyDB::CMyDB()
{
m_pConnection = NULL;
}CMyDB::~CMyDB()
{
}HRESULT CMyDB::InitDB()
{
if(FAILED(::CoInitialize(NULL)))
return E_FAIL;
return S_OK;
}
void CMyDB::PrintProviderError(_ConnectionPtr pConnection)
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL; if( (pConnection->Errors->Count) > 0)
{
long nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount -1.
for(long i = 0;i < nCount;i++)
{
pErr = pConnection->Errors->GetItem(i);
_stprintf( m_pstr,"\t Error number: %x\t%s", pErr->Number,
pErr->Description);
::MessageBox( NULL, m_pstr, NULL, MB_OK );
}
}
}void CMyDB::PrintComError(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description()); // Print COM errors.
//printf("Error\n");
_stprintf(m_pstr, "\tCode = %08lx\n", e.Error());
::MessageBox( NULL, m_pstr, NULL, MB_OK );
_stprintf(m_pstr, "\tCode meaning = %s\n", e.ErrorMessage());
::MessageBox( NULL, m_pstr, NULL, MB_OK );
_stprintf(m_pstr, "\tSource = %s\n", (LPCSTR) bstrSource);
::MessageBox( NULL, m_pstr, NULL, MB_OK );
_stprintf(m_pstr, "\tDescription = %s\n", (LPCSTR) bstrDescription);
::MessageBox( NULL, m_pstr, NULL, MB_OK );
}
_bstr_t CMyDB::GetState(int intState)
{
_bstr_t strState;
switch(intState)
{
case adStateClosed:
strState = "adStateClosed";
break;
case adStateOpen:
strState = "adStateOpen";
break;
default:
;
}
return strState;
}HRESULT CMyDB::DeleteObjects()
{
if(m_pConnection)
CloseDb();
::CoUninitialize(); return S_OK;
}HRESULT CMyDB::OpenDb(TCHAR* pDir)
{
if(m_pConnection)
CloseDb(); TCHAR pcn[MAX_PATH + 50] = "DBQ=";
_tcscat(pcn,pDir);
_tcscat(pcn,";DRIVER={Microsoft Access Driver (*.mdb)};");
m_strCnn = pcn;
try
{
// Open connection.
TESTHR(m_pConnection.CreateInstance(__uuidof(Connection)));
m_pConnection->Open (m_strCnn, "", "", adConnectUnspecified);
} catch(_com_error &e)
{
CString str;
str.Format("数据库操作错误\n错误代码:%08lx\n错误信息:", e.Error());
str += e.Description();
AfxMessageBox(str);
::PostMessage(0, WM_QUIT, 0l, 0l );
return E_FAIL;
}
return S_OK;
}HRESULT CMyDB::CloseDb()
{
if(m_pConnection->State == adStateOpen)
m_pConnection->Close();
return S_OK;
}_RecordsetPtr CMyDB::ExecuteRs( _bstr_t strSql )
{
_RecordsetPtr pRst = NULL;
try
{
pRst = m_pConnection->Execute(strSql, NULL, adCmdText);
} catch(_com_error &e)
{
PrintComError(e);
}
return pRst;
}void CMyDB::Execute( _bstr_t strSql )
{
try
{
m_pConnection->Execute(strSql, NULL,
adCmdText | adExecuteNoRecords);
} catch(_com_error &e)
{
PrintComError(e);
}
}
_RecordsetPtr CMyDB::GetSort()
{
_RecordsetPtr pRst = NULL;
_bstr_t strSql("select distinct 分类 from 主表");
pRst = ExecuteRs(strSql);
return pRst;
}_RecordsetPtr CMyDB::GetSpec( TCHAR* strSort )
{
_RecordsetPtr pRst = NULL;
TCHAR sql[100]="select distinct 规格 from 主表 where 分类 = '";
_tcscat(sql,strSort);
_tcscat(sql,"'");
//_bstr_t strSql("select distinct 规格 from 主表 where 分类 = ");
_bstr_t strSql = sql;
pRst = ExecuteRs(strSql);
return pRst;
}_RecordsetPtr CMyDB::GetSeries( const TCHAR* strSort , TCHAR* strSpec )
{
_RecordsetPtr pRst = NULL;
TCHAR sql[100]="select distinct 系列 from 主表 where 分类 = '";
_tcscat(sql,strSort);
_tcscat(sql,"' and 规格 = '");
_tcscat(sql,strSpec);
_tcscat(sql,"'");
_bstr_t strSql = sql;
pRst = ExecuteRs(strSql);
return pRst;
}_RecordsetPtr CMyDB::GetTexture( const TCHAR* strSort ,
const TCHAR* strSpec, const TCHAR* strSeries )
{
_RecordsetPtr pRst = NULL;
TCHAR sql[150]="select 花色, 代号 from 主表 where 分类 = '";
_tcscat(sql,strSort);
_tcscat(sql,"' and 规格 = '");
_tcscat(sql,strSpec);
_tcscat(sql,"' and 系列 = '");
_tcscat(sql,strSeries);
_tcscat(sql,"'");
_bstr_t strSql = sql;
pRst = ExecuteRs(strSql);
return pRst;
}_RecordsetPtr CMyDB::GetById( const TCHAR* strId )
{
_RecordsetPtr pRst = NULL;
TCHAR sql[150]="select * from 主表 where 代号 = '";
_tcscat(sql,strId);
_tcscat(sql,"'");
_bstr_t strSql = sql;
pRst = ExecuteRs(strSql);
return pRst;
}_RecordsetPtr CMyDB::GetAllSort()
{
_RecordsetPtr pRst = NULL;
TCHAR sql[150]="select * from 分类";
_bstr_t strSql = sql;
pRst = ExecuteRs(strSql);
return pRst;
}_RecordsetPtr CMyDB::GetAllSeries()
{
_RecordsetPtr pRst = NULL;
TCHAR sql[150]="select * from 系列";
_bstr_t strSql = sql;
pRst = ExecuteRs(strSql);
return pRst;
}void CMyDB::AddSort( LPCTSTR strSort )
{
TCHAR sql[150]="insert into 分类 ( 分类 ) values ( '";
_tcscat(sql,strSort);
_tcscat(sql,"')");
_bstr_t strSql = sql;
Execute(strSql);
}void CMyDB::AddSeries( LPCTSTR strSeries )
{
TCHAR sql[150]="insert into 系列 ( 系列 ) values ( '";
_tcscat(sql,strSeries);
_tcscat(sql,"')");
_bstr_t strSql = sql;
Execute(strSql);
}void CMyDB::AddRecord( LPCTSTR strSort, LPCTSTR strSeries,
LPCTSTR strSpec, LPCTSTR strId,
LPCTSTR strMat, LPCTSTR strTexture,
LPCTSTR strPrice,LPCTSTR strMemo,
LPCTSTR strUnit )
{
TCHAR sql[2000]="insert into 主表 ( 分类, 系列, 规格, 代号, 材质, 花色, 价格, 说明, 单位) values ( '";
//AfxMessageBox("begin");
_tcscat(sql,strSort);
_tcscat(sql,"', '");
_tcscat(sql,strSeries);
_tcscat(sql,"', '");
_tcscat(sql,strSpec);
_tcscat(sql,"', '");
_tcscat(sql,strId);
_tcscat(sql,"', '");
_tcscat(sql,strMat);
_tcscat(sql,"', '");
_tcscat(sql,strTexture);
_tcscat(sql,"', '");
_tcscat(sql,strPrice);
_tcscat(sql,"', '");
_tcscat(sql,strMemo);
_tcscat(sql,"', '");
_tcscat(sql,strUnit);
_tcscat(sql,"')");
//AfxMessageBox("begin2");
_bstr_t strSql = sql;
Execute(strSql);
//AfxMessageBox("end");
}_RecordsetPtr CMyDB::GetAllId()
{
_RecordsetPtr pRst = NULL;
TCHAR sql[150]="select 代号 from 主表";
_bstr_t strSql = sql;
pRst = ExecuteRs(strSql);
return pRst;
}void CMyDB::DelRecord( LPCTSTR strId )
{
TCHAR sql[150]="delete from 主表 where 代号 = '";
_tcscat(sql,strId);
_tcscat(sql,"'");
_bstr_t strSql = sql;
Execute(strSql);
}
要是多个参数,是一个一个地APPEND吗?
to xxc6(过儿):
你这个程序是对SQL语句的调用吧?好像不是对存储过程的调用!
谢谢!