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;
}
posted on 2006-05-20 11:40  dgz  阅读(400)  评论(0编辑  收藏  举报