毕业设计网
开发环境 |

VC下用ADO操作SQL Server2000 数据库

ADO(Active Data Object,活动数据对象)实际上是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。 ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了。这里作者提供一个封装好的ADO访问数据库的类ADOConn,其中使用到得配置文件内容为:

[DBSETTING]

UserId=sa

Passwd=sa

DbName=filedisk //数据库名

Server=ibmthink //sqlserver 的服务器

 

// ADOConn.h: interface for the ADOConn class.
//
//////////////////////////////////////////////////////////////////////
 
#if !defined(AFX_ADOCONN_H__DE5F366E_0B7D_4AA9_85DC_89B767A4FB2F__INCLUDED_)
#define AFX_ADOCONN_H__DE5F366E_0B7D_4AA9_85DC_89B767A4FB2F__INCLUDED_
 
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll"no_namespace\
  rename("EOF","adoEOF")
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
 
class ADOConn  
{
public:
    static ADOConn*Instance();
static  void Release();
public:
void setDbRootDir(CString strDir);
void LoadDBCfg();
 
BOOL ExecuteSQL(_bstr_t bstrSQL);
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
void ExitConn();
void InitADOConn();
 
ADOConn();
virtual ~ADOConn();
public:
static ADOConn*m_pSelf;
 
CString m_strDbRootDir;
CString m_strDbName;
CString m_strUserId;
CString m_strPasswd;
CString m_strServer;
 
_ConnectionPtr m_pCon;
_RecordsetPtr m_pRs;
};
// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////
 
#include "stdafx.h"
#include "ADOConn.h"
 
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
 
#define DBSECTION _T("DBSETTING")
#define DBCFG _T("Db.ini")
#define USERIDENTRY _T("UserId")
#define PASSWDENTRY _T("Passwd")
#define DBNAMEENTRY _T("DbName")
#define SERVERENTRY _T("Server")
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn*ADOConn::m_pSelf=NULL;
ADOConn::ADOConn()
{
 
}
 
ADOConn::~ADOConn()
{
ExitConn();
}
ADOConn*ADOConn::Instance()
{
if(m_pSelf==NULL)
m_pSelf=new ADOConn();
return m_pSelf;
}
void ADOConn::Release()
{
if(m_pSelf)
delete m_pSelf;
m_pSelf=NULL;
}
void ADOConn::setDbRootDir(CString strDir)
{
m_strDbRootDir=strDir;
LoadDBCfg();
}
void ADOConn::LoadDBCfg()
{
 
TCHAR ch=m_strDbRootDir.GetAt(m_strDbRootDir.GetLength()-1);
 
CString cfgFile;
if(_T('/')== ch || _T('\\') == ch)
cfgFile=m_strDbRootDir+DBCFG;
else
cfgFile=m_strDbRootDir+_T("/")+DBCFG;
 
CFileStatus fState;
if(!CFile::GetStatus(cfgFile,fState))//检查配置文件是否存在
return;
//throw DatabaseException(_T("db.ini 不存在"));
 
const int size=1024;
TCHAR buff[size];
 
memset(buff,0,sizeof(TCHAR)*size);
if(GetPrivateProfileString(DBSECTION,DBNAMEENTRY,_T(""),buff,size,cfgFile)<size)
m_strDbName=buff;
 
memset(buff,0,sizeof(TCHAR)*size);
if(GetPrivateProfileString(DBSECTION,USERIDENTRY,_T(""),buff,size,cfgFile)<size)
m_strUserId=buff;
 
 
memset(buff,0,sizeof(TCHAR)*size);
if(GetPrivateProfileString(DBSECTION,PASSWDENTRY,_T(""),buff,size,cfgFile)<size)
m_strPasswd=buff;
 
memset(buff,0,sizeof(TCHAR)*size);
if(GetPrivateProfileString(DBSECTION,SERVERENTRY,_T(""),buff,size,cfgFile)<size)
m_strServer=buff;
}
void ADOConn::InitADOConn()
{
try
{
CString dbname=m_strDbName;
CString uid=m_strUserId;
CString pwd=m_strPasswd;
 
CString dburl=_T("Provider=sqloledb");
dburl+=_T(";Data Source=")+m_strServer;
dburl+=_T(";Initial Catalog=")+dbname;
dburl+=_T(";Persist Security Info=False");
 
if(uid.GetLength()>0)
{
dburl+=_T(";UID=")+uid;
dburl+=_T(";PWD=")+pwd;
}
 
 
if(FAILED(m_pCon.CreateInstance("ADODB.Connection")))
{
AfxMessageBox(_T("创建Connection对象失败"));
return ;
}
try
{
m_pCon->ConnectionTimeout=3;
m_pCon->Open(_bstr_t(dburl),_bstr_t(_T("")),_bstr_t(_T("")),adConnectUnspecified);
}
catch (_com_error &e)
{
m_pCon.Release();
m_pCon=NULL;
//throw DatabaseException(e.Error());
//throw DatabaseException(e.Description());
}
catch(...)
{
m_pCon.Release();
m_pCon=NULL;
//throw DatabaseException(_T("连接数据库失败!"));
}
//m_pCon->ConnectionTimeout=3;
//m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ExamOnline.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
}
 
void ADOConn::ExitConn()
{
if(m_pRs!=NULL)
m_pRs->Close();
m_pCon->Close();
 
}
 
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
if(m_pCon==NULL)
InitADOConn();
m_pRs.CreateInstance("ADODB.Recordset");
m_pRs->Open(bstrSQL,m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
return m_pRs;
}
 
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if(m_pCon==NULL)
InitADOConn();
m_pCon->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
 
}
以上是一部分介绍,如需要完整的资料或者如不符合您的要求,请联系技术人员qq:242219979咨询

上一篇:Can't connect to MySQL server (10060),
下一篇:vc.net启动调试失败


版权所有 毕业设计网联系qq:242219979 © 2007-2022