HRESULT GetByID([in] BSTR bstrUnitID , [out,retval] LPDISPATCH *ppRecordset);
----------------------------------------------------------
Implementation:
STDMETHODIMP CChargeC::GetByID(BSTR bstrUnitID, LPDISPATCH *ppRecordset)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: Add your implementation code here
if(ppRecordset == NULL)
return E_INVALIDARG;
*ppRecordset = NULL;
HRESULT hr = S_OK;
try{
_ConnectionPtr pAdoConnection;
_RecordsetPtr pAdoRecordset;
_bstr_t bstrSQL;
_variant_t vntRecordsAffected;
basic_stringstream < wchar_t > bssSQL;
pAdoConnection.CreateInstance(__uuidof(Connection));
pAdoConnection->CursorLocation = adUseClient;
pAdoConnection->Open( m_bstrConnectionString , (BSTR)NULL , (BSTR)NULL , -1);
bssSQL << L"SELECT * FROM 表_收费 WHERE 单元号 = '" << bstrUnitID << L"'" << ends;
bstrSQL = bssSQL.str().c_str();
TRACE0(_T("In db_ChargeC.ChargeC!CChargeC::GetByID\n"));
TRACE1(_T("SQL = %s\n\n") , (LPCTSTR)bstrSQL);
pAdoRecordset = pAdoConnection->Execute(bstrSQL , &vntRecordsAffected , adCmdText);
pAdoRecordset->PutRefActiveConnection( NULL );
pAdoRecordset->AddRef();
pAdoRecordset->QueryInterface(IID_IDispatch , (void **) ppRecordset);
if(m_spObjectContext != NULL)
m_spObjectContext->SetComplete();
}
catch(_com_error &e)
{
hr = e.Error();
if(m_spObjectContext != NULL)
m_spObjectContext->SetAbort();
TRACE1(_T("\nError occured in db_ChargeC.ChargeC!CChargeC::GetByID\nError Number : %d\n") , hr);
TRACE3(_T("Source : %s\nDescription : %s\nErrorMessage : %s\n") ,
(LPCTSTR) e.Source() , (LPCTSTR) e.Description() , (LPCTSTR) e.ErrorMessage());
CString str = (LPCTSTR) e.Description();
if(str.GetLength()<1)
str = e.ErrorMessage();
if(str.GetLength()<1)
str = "Unknown";
AtlReportError(CLSID_ChargeC , (LPCTSTR)str , IID_IChargeC , hr);
}
return hr;
}
一个增加用户的框架
// Users.cpp : Implementation of CUsers
#include "stdafx.h"
#include "HisCommVc.h"
#include "Users.h"
#include <mtx.h>
#include <sstream>
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// CUsers
STDMETHODIMP CUsers::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IUsers
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
////////////////////////////////////////////////////////////////////
//接口名称: Add 往用户字典表中增加一条记录
//Input: loginID 数据库登录名
// userName 姓名
// passWord 密码
// userDept
// casherNo
// createDate 日期
//Output: 无
///////////////////////////////////////////////////////////////////
STDMETHODIMP CUsers::Add(BSTR loginId, BSTR userName, BSTR passWord,BSTR userDept, BSTR cashNo, DATE createDate)
{
// TODO: Add your implementation code here
_ConnectionPtr padoConnection = NULL;
CComPtr<IObjectContext> pObjCtx = NULL;
HRESULT hr = S_OK;
_bstr_t strSQLStmt;
try
{
//创建MTS上下文环境
hr = GetObjectContext(&pObjCtx);
// String I/O stream to write SQL statement
basic_stringstream<wchar_t> strSQLStatement;
//创建SQL语句
strSQLStatement<<L"insert into hiscomm.dbo.users("
<<L"login_id,user_name,password,user_dept,casher_no,create_date) values('"
<< static_cast<wchar_t *>(FixSQLString(loginId)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(userName)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(passWord)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(userDept)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(cashNo)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(createDate)) << L"')";
//转换成bstr_t
strSQLStmt = strSQLStatement.str().c_str();
//连接数据库
hr = OpenConnection((LPDISPATCH*)&padoConnection);
//执行SQL语句
padoConnection->Execute(strSQLStmt,NULL,adCmdText);
if (pObjCtx)
pObjCtx->SetComplete();
if (padoConnection)
padoConnection->Close();
}
//返回错误信息
catch(_com_error &e)
{
BSTR err=e.Description ();
if (pObjCtx)
pObjCtx->SetAbort();
if (padoConnection)
{
padoConnection->Close();
}
hr=e.Error();
return Error(err,NULL,NULL,IID_IUsers,hr);
}
return S_OK;
}
----------------------------------------------------------
Implementation:
STDMETHODIMP CChargeC::GetByID(BSTR bstrUnitID, LPDISPATCH *ppRecordset)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: Add your implementation code here
if(ppRecordset == NULL)
return E_INVALIDARG;
*ppRecordset = NULL;
HRESULT hr = S_OK;
try{
_ConnectionPtr pAdoConnection;
_RecordsetPtr pAdoRecordset;
_bstr_t bstrSQL;
_variant_t vntRecordsAffected;
basic_stringstream < wchar_t > bssSQL;
pAdoConnection.CreateInstance(__uuidof(Connection));
pAdoConnection->CursorLocation = adUseClient;
pAdoConnection->Open( m_bstrConnectionString , (BSTR)NULL , (BSTR)NULL , -1);
bssSQL << L"SELECT * FROM 表_收费 WHERE 单元号 = '" << bstrUnitID << L"'" << ends;
bstrSQL = bssSQL.str().c_str();
TRACE0(_T("In db_ChargeC.ChargeC!CChargeC::GetByID\n"));
TRACE1(_T("SQL = %s\n\n") , (LPCTSTR)bstrSQL);
pAdoRecordset = pAdoConnection->Execute(bstrSQL , &vntRecordsAffected , adCmdText);
pAdoRecordset->PutRefActiveConnection( NULL );
pAdoRecordset->AddRef();
pAdoRecordset->QueryInterface(IID_IDispatch , (void **) ppRecordset);
if(m_spObjectContext != NULL)
m_spObjectContext->SetComplete();
}
catch(_com_error &e)
{
hr = e.Error();
if(m_spObjectContext != NULL)
m_spObjectContext->SetAbort();
TRACE1(_T("\nError occured in db_ChargeC.ChargeC!CChargeC::GetByID\nError Number : %d\n") , hr);
TRACE3(_T("Source : %s\nDescription : %s\nErrorMessage : %s\n") ,
(LPCTSTR) e.Source() , (LPCTSTR) e.Description() , (LPCTSTR) e.ErrorMessage());
CString str = (LPCTSTR) e.Description();
if(str.GetLength()<1)
str = e.ErrorMessage();
if(str.GetLength()<1)
str = "Unknown";
AtlReportError(CLSID_ChargeC , (LPCTSTR)str , IID_IChargeC , hr);
}
return hr;
}
一个增加用户的框架
// Users.cpp : Implementation of CUsers
#include "stdafx.h"
#include "HisCommVc.h"
#include "Users.h"
#include <mtx.h>
#include <sstream>
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// CUsers
STDMETHODIMP CUsers::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IUsers
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
////////////////////////////////////////////////////////////////////
//接口名称: Add 往用户字典表中增加一条记录
//Input: loginID 数据库登录名
// userName 姓名
// passWord 密码
// userDept
// casherNo
// createDate 日期
//Output: 无
///////////////////////////////////////////////////////////////////
STDMETHODIMP CUsers::Add(BSTR loginId, BSTR userName, BSTR passWord,BSTR userDept, BSTR cashNo, DATE createDate)
{
// TODO: Add your implementation code here
_ConnectionPtr padoConnection = NULL;
CComPtr<IObjectContext> pObjCtx = NULL;
HRESULT hr = S_OK;
_bstr_t strSQLStmt;
try
{
//创建MTS上下文环境
hr = GetObjectContext(&pObjCtx);
// String I/O stream to write SQL statement
basic_stringstream<wchar_t> strSQLStatement;
//创建SQL语句
strSQLStatement<<L"insert into hiscomm.dbo.users("
<<L"login_id,user_name,password,user_dept,casher_no,create_date) values('"
<< static_cast<wchar_t *>(FixSQLString(loginId)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(userName)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(passWord)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(userDept)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(cashNo)) << L"','"
<< static_cast<wchar_t *>(FixSQLString(createDate)) << L"')";
//转换成bstr_t
strSQLStmt = strSQLStatement.str().c_str();
//连接数据库
hr = OpenConnection((LPDISPATCH*)&padoConnection);
//执行SQL语句
padoConnection->Execute(strSQLStmt,NULL,adCmdText);
if (pObjCtx)
pObjCtx->SetComplete();
if (padoConnection)
padoConnection->Close();
}
//返回错误信息
catch(_com_error &e)
{
BSTR err=e.Description ();
if (pObjCtx)
pObjCtx->SetAbort();
if (padoConnection)
{
padoConnection->Close();
}
hr=e.Error();
return Error(err,NULL,NULL,IID_IUsers,hr);
}
return S_OK;
}