VC中使用ADO进行数据库开发的一些资料的整理

原创 2007年10月12日 13:04:00
.h中,加入如下代码
#import "c:/program files/common files/system/ado/msado15.dll"  /
            no_namespace  rename("EOF","adoEOF") rename("BOF","adoBOF")


2.Com 初试化
在app的InitInstance中,加入

AfxOleInit();(MFC)
或者
CoInitialize(NULL)

如果用了CoInitialize

退出时,要调用CoUninitialize()

注意,如果在线程中也使用了com,那么在线程中也要用CoInitialize初始


3.连接数据库

_ConnectionPtr  m_pAppConn;


hResult = m_pAppConn.CreateInstance(_T("ADODB.Connection"));///创建Connection对象


然后连接之
m_pAppConn->Open("Provider=Microsoft.Jet.OLEDB.4.0 ; /
  Data Source = .//DataBase//aa.mdb",
        "","",adModeUnknown);

BOOL OpenConnect()
{
 HRESULT hResult;

 CloseConnect();

 try
 {
  hResult = m_pAppConn.CreateInstance(_T("ADODB.Connection"));///创建Connection对象
  if(SUCCEEDED(hResult))
  {
   m_pAppConn->Open("Provider=Microsoft.Jet.OLEDB.4.0 ; /
            Data Source = .//DataBase//aa.mdb",
              "","",adModeUnknown);
  } 
    
 }
 
 catch(_com_error e)///捕捉异常
 {
  CString errormessage;
  errormessage.Format(_T("连接数据库失败!/r/n错误信息:%s"),e.ErrorMessage());
  AfxMessageBox(errormessage);

  hResult = -1L;
 }

 return (SUCCEEDED(hResult) ? TRUE : FALSE);
}


这里连接的数据库是access数据库,在工程目录下的DataBase/aa.mdb

关键连接的字符窜,
如果是access

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=//192.168.1.1/DataBase/aa.mdb;
这是局域网上的文件

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.//DataBase//aa.mdb;
本机上的

如果是sql 2000
Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=sa;Initial Catalog=aa;Data Source=192.168.1.1;
数据库在192.168.1.1上,数据库名字是aa


4.关闭连接

BOOL CloseConnect()
{
 HRESULT hResult=0;

 try
 {
  if(m_pAppConn!=NULL)
  {
   if(m_pAppConn->State!=adStateClosed)
   {
    hResult=m_pAppConn->Close();
   }

   m_pAppConn.Release();
  }
 }
 
 catch(_com_error e)
 {
  _bstr_t bstrSource(e.Source());

  _bstr_t bstrDescription(e.Description());
  
  TRACE(_T("/n Source : %s /n Description : %s /n"),(LPCSTR)bstrSource,(LPCSTR)bstrDescription);

  hResult=-1L;

 }

 return (SUCCEEDED(hResult) ? TRUE : FALSE);

}


5.使用recodeset打开记录

  _variant_t      RecordsAffected;
 _RecordsetPtr   pRecordset = NULL;
 

        strSql = _T("SELECT field FROM table");

     pRecordset.CreateInstance(_uuidof(Recordset));
    pRecordset = pConn->Execute (_bstr_t(strSql) , &RecordsAffected , adCmdUnknown);
  
   其中&RecordsAffected 可以获得有多少记录返回,这是记录的影像数目


6.关闭记录集
 if(pRecordset != NULL && pRecordset->State)
  {
   pRecordset->Close();
   pRecordset = NULL; 
  } 

7.判断是否为空
 if (pRecordset->adoBOF && pRecordset->adoEOF)
 {
  //MessageBox("没有符合条件的记录存在!","提示");
  if(pRecordset != NULL && pRecordset->State)
  {
   pRecordset->Close();
   pRecordset = NULL; 
  } 
  return;
 }


8,从记录集取数据
   
_variant_t      var;

  pRecordset->MoveFirst();
 
 for(;!pRecordset->adoEOF;pRecordset->MoveNext())
 {
  var = pRecordset->GetCollect(_T("field"));
 }

9.几种常见数据的转换
 如果是字符窜的字段

  var = pRecordset->GetCollect(_T("field"));
  if(var.vt!=VT_NULL)
  {
   str= (LPCTSTR)_bstr_t(var);
  }

 if(var.vt!=VT_NULL)
判断是必须的,如果是空,转换会出错

如果是int形
int aa = atoi(str)

_variant_t是个可变类型,支持很多种类型,


10.使用command

利用Command对象来执行SQL命令
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;///定义为无参数
m_pCommand->ActiveConnection = m_pConnection;///非常关键的一句,将建立的连接赋值给它
m_pCommand->CommandText = "SELECT * FROM users";///命令字串
m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///执行命令,取得记录集


如果使用记录集的open来打开command对象.
如果在 Source 参数中传送 Command 对象并且同时传递 ActiveConnection 参数,那么将产生错误。Command 对象的 ActiveConnection 属性

必须已经设置为有效的 Connection 对象或者连接字符串。

所以
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;
_CommandPtr pCommand;
...
m_pRecordset->Open(_variant_t( (IDispatch*)pCommand, true),vNULL,CursorType, LockType, lOption )


11.关于数据中时间的处理
首先,sql语句中有很多时间处理的函数,可以拿来使用,如果不使用这些函数,那么直接用sql语句来拼写

CString strDate= "2006-8-11";

CString strsql;

strsql.Format("SELECT * FROM Table where Date=#%s#",strDate);

m_pRecordset->Open(_bstr_t(strsql),              
           theApp.m_pConnection.GetInterfacePtr(),
  adOpenDynamic,
  adLockOptimistic,
  adCmdText);

accee用#时间,其他大部分都是用''来括的


如果返回得到一个时间,那么
CString类型的变量转化成COleDateTime

COleDateTime::ParseDateTime

或者

CString str = "2004-07-08 11:22:33";
COleVariant VariantTime;
VariantTime = str;
VariantTime.ChangeType(VT_DATE);
COleDateTime DataTime = VariantTime;

 

反过来转,更简单了,
COleDateTime有format 函数,包括CTime也有这样的函数


12,插入或者删除记录
 strSql.Format(_T(" INSERT INTO table VALUES('%s','%s','%s','%s',#%s#)"),
               strID,strName,strAuthor,strPublisher,strDate);


 try
 {
  pConn->Execute (_bstr_t(strSql) , &RecordsAffected , adCmdUnknown); 
 }


删除也是类似的

添加删除的话,是不返回记录集的,其他的地方,和查询是一样的

 

VC用ADO访问数据库

VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。  正文  一、ADO概述  ADO是Microsoft为最新和最强大的数据访问...
  • worldy
  • worldy
  • 2013年09月21日 11:18
  • 4537

VC使用ADO访问sql server数据库

软件:vs2010、sql server2005 代码如下: #include #include using namespace std; //1、添加对ADO的支持 #import "C...
  • woshiyuanlei
  • woshiyuanlei
  • 2015年05月31日 13:37
  • 1508

分享关于VC 使用ADO数据库使用的方法封装类

ADO访问数据库的
  • YinLeNan
  • YinLeNan
  • 2014年07月27日 14:43
  • 637

ADO在VC的MFC下连接数据库并插入数据

1,ADO连接数据库 一般不用ODBC连接数据库,太古老了,主流用ADO连接数据库。 连接步骤: 1需要先安装SQL SEVER2008。 启动运行服务器SQL SEVER(MSSQLSERV...
  • a286089246
  • a286089246
  • 2016年09月26日 15:06
  • 2444

VS2013在MFC中使用ADO方法操作Access2013数据库

VS2015在MFC中使用ADO方法操作Access2013数据库
  • DaveBobo
  • DaveBobo
  • 2016年11月25日 09:52
  • 3934

C++ ADO方式连接mysql数据库

对于软件开发其实说白了就是在不停地和数据打交道, 所以数据库的操作是必不可少的, 接下来介绍VC开发中利用ADO建立ODBC数据源来访问MySQL数据库.        从我接触的数据库编程方式来说,...
  • lbcab
  • lbcab
  • 2016年05月06日 10:02
  • 4086

VC使用ADO连接SQLServer数据库(精简实用版)

VC使用ADO连接SQLServer数据库 分类: 开发路上的点点滴滴2012-05-18 18:32 946人阅读 评论(0) 收藏 举报 sqlservermicrosoft数...
  • foreverhuylee
  • foreverhuylee
  • 2014年06月28日 14:46
  • 1767

在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

正如我上一篇博文提到,ADO这货和MFC没有任何关系,ADO 是一个独立的组件。所以为了使用ADO wi...
  • wenluderen
  • wenluderen
  • 2014年09月03日 16:43
  • 9543

VC_ADO连接SQLSERVER时连接字符串的模式

VC的数据库编程中,使用ADO连接连接SQL SERVER 时,连接字符串的概念很重要。 这篇文章重点介绍ADO和SQL SERVER进行连接时,几种不同的连接字符串形式,并且分析了连接SQL SER...
  • foreverhuylee
  • foreverhuylee
  • 2014年07月01日 18:40
  • 7105

VC 中的ADO数据库开发

1.在vc++中使用ado 首先要在头文件stdafx.h中加入以下代码: #import "msado15.dll" no_namespace \ rename("EOF","EndOfFil...
  • xishantaxue
  • xishantaxue
  • 2013年03月16日 18:42
  • 255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中使用ADO进行数据库开发的一些资料的整理
举报原因:
原因补充:

(最多只允许输入30个字)