VC用Ado接口连接和使用数据库及注意事项_实用技巧

一、阅读本文所需注意的其它事项
  1、进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现)
  2、每个源文件的每行注释说明了其文件名
  3、请关注相关头文件包含关系
  4、请关注文中所有中文注释
  5、更多的内容请参阅 "VC安装目录\Include\adoint.h"文件,adoint即ActiveX Data Object
  InterFace(菜 鸟请勿惊慌,这仅仅只是个名称)

二、下面的源文件与您的数据库应用程序不直接相关,但其目标代码(生成的.obj文件)是您必需的,请参考
  file://Ado.cpp文件///////////////////////////////////////////
  #include
  #include
  #include
  该文件使用方法:新建一个空的MFC工程,将此文件添加到该工程中,编译生成Ado.obj文件,再将此.obj文件添加到您的数据库应用程序.该源文件在您的数据库应用程序中是不需要的。

三、下面是与您的数据库应用程序源文件相关代码(非所有代码)

复制代码 代码如下:

  file://1、ado.h文件////////////////////////////////////////
  #ifndef __ADO__H__LZG
  #define __ADO__H__LZG
  #include
  #include
  #include
  #endif
  file://2、stdafx.h文件////////////////////////////////////////
  #if _MSC_VER > 1000
  #pragma once
  #endif // _MSC_VER > 1000
  #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
  #include // MFC core and standard components
  #include // MFC extensions
  #include // MFC Automation classes
  #include // MFC support for Internet Explorer 4 Common Controls
  #include "ado.h" file://请注意这里
  #ifndef _AFX_NO_AFXCMN_SUPPORT
  #include
  file://3、数据库应用程序.h文件///////////////////////////////////////////////
  file://以下为用到的若干相关数据库引用变量(声明在其头文件中)
  ADOField* pfd;
  ADOFields* pfds;
  CString m_dbfile;
  ADORecordset* prs;
  ADOConnection* pdb;
  file://4、数据库应用程序.cpp文件/////////////////////////////////////////////
  #include "stdafx.h"
  #include "数据库应用程序.h"
  file://这里添加其它相关头文件
  file://以下为该.cpp文件中若干自定义或非自定义的方法,与数据库连接相关
  file://其中每一条语句都有含义,请关注其中的注释
  BOOL CBKDlg::InitDataEnv()
  {
   file://下面定义了一个简单的连接字符串,当然还有更复杂的
   CString s=_T("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=d:\\data\\资料借阅管理.mdb");
   ::CoInitialize (NULL);//初始化COM环境
   CoCreateInstance(CLSID_CADOConnection,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADOConnection15,
   (LPVOID*)&pdb
   );//初始化一个ADO连接
  CoCreateInstance(CLSID_CADORecordset,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADORecordset,
   (LPVOID*)&prs
   );//初始化一个ADO数据集
  CoCreateInstance(CLSID_CADOField,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADOFields,
   (LPVOID*)&pfds
   );//初始化一个ADO数据域集合(域即是Fox中的字段,下同)
  CoCreateInstance (CLSID_CADOField,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADOField,
   (LPVOID*)&pfd
   );//初始化一个ADO数据域集合中的一个域
  file://打开上述ADO连接
  pdb->Open((unsigned short*)(LPCSTR)s,(unsigned short*)"",(unsigned short*)"",0);
   file://打开上述ADO数据集,但它的连接参数是使用的上述字符串
  file://应当存在以上面的连接替换该字符串的方法,但我没找到
  prs->Open(COleVariant(_T("资料信息")),COleVariant(s),adOpenKeyset,adLockOptimistic,adCmdTable);
  file://数据集的域不存在打开与否,只需直接到已打开的数据集中引用即可,详情请见
  
  file://CBKDlg::OnBeforeColUpdateDatagrid方法
  m_dg.ClearFields ();//MS DATAGRID 控件(Activex)的数据清空
  m_dg.SetRefDataSource(prs); file://上述控件与数据集的绑定
  return TRUE;
  }
  BOOL CBKDlg::DestroyWindow()
   {
    // TODO: Add your specialized code here and/or call the base class
    m_dg.SetRefDataSource(NULL);
    long state;
    file://下面的处理可能存在逻辑上的错误,不过关闭数据集与数据连接的语法是正确的
    if(!FAILED(prs->get_State(&state)))
     if(state!=adStateClosed)
      {
       prs->Close();
       prs=NULL;
      }
     if(!FAILED(pdb->get_State(&state)))
      if(state!=adStateClosed)
      {
       pdb->Close();
       pdb=NULL;
      }
     ::CoUninitialize ();//释放COM环境
     return CDialog::DestroyWindow();
    }
    void CBKDlg::OnBeforeColUpdateDatagrid(short ColIndex, VARIANT FAR* OldValue, short FAR* Cancel)
   {
    file://该事件(方法)在MS DATAGRID 控件(ActiveX)的单元数据更新前发生
    file://该事件您可能用不着,但其中的代码您可能用得着
    COleVariant v((LPCSTR)m_dg.GetText ());//获取上述控件当前单元格的数据
    CString fieldname=m_dg.GetColumns().GetItem(COleVariant(ColIndex)).GetCaption();
    DataTypeEnum fieldtype;//描述ADO数据类型的枚举类型
    prs->get_Fields(&pfds);//从数据集中获得数据域集合
    pfds->get_Item (COleVariant(fieldname),&pfd);//从数据域集合中获得特定名称的域
    pfd->get_Type (&fieldtype);//从上述域中获取其数据类型,如整型或字符串型
    switch (fieldtype){
     case adSmallInt:
     case adInteger:
          break;
     case adDate:
          break;
     case adCurrency://Data type describing for Money ,Understand?
          break;
     case adVarChar://对应于VB中的String类型和VC中的CString类型
          break;
     default:
          break;
     }
    }//该方法来源于MS DataGrid ActiveX控件的事件,无具体的处理代码,望海涵

时间: 2024-07-30 02:33:51

VC用Ado接口连接和使用数据库及注意事项_实用技巧的相关文章

ADO.NET之连接池技术的使用详解_实用技巧

连接到数据库服务器通常需要一定的时间,且服务器也需要一定的资源来处理连接.Web应用程序有时处理成千上万的连接,需要相当多的资源来处理连接.ADO.NET具有连接池的特性,连接池的功能是保留一定数量的连接,当用户使用相同的连接字符串再次连接服务器时,ASO.NET将使用连接池中的连接而不用重新发起一次连接过程.当调用Close方法关闭连接时,ADO.NET将使用连接池中的连接而不用重新发起一次连接过程.当调用Close方法关闭连接时,连接将会返回到连接池中,下次再次调用Open方法时,将从连接池

ASP.NET连接sql2008数据库的实现代码_实用技巧

利用SqlConnection对象连接sql2000以上版本,并使用SqlCommand对象对数据库进行读取. SqlCommand类概述:  用于对sql数据库执行sql语句或存储过程.  命名空间:System.Data.SqlClient 程序集: System.Data(在 System.Data.dll中) SqlCommand类的属性 1.CommandText 获取或设置要对数据源执行的Transact-SQL语句或存储过程. 2. CommandType 获取或设置一个值,该值指

ASP.NET 连接ACCESS数据库的简单方法_实用技巧

index.aspx 复制代码 代码如下: <%@ Page Language="C#" %><%@ import Namespace="System.Data" %><%@ import Namespace="System.Data.OleDb" %><script runat="server">    // Insert page code here    //    voi

C#中使用SQLite数据库的方法介绍_实用技巧

[SQLite管理工具简介] 推荐以下2款: Navicat for SQLite:功能非常强大,几乎包含了数据库管理工具的所有必需功能,操作简单,容易上手.唯一的缺点是不能打开由System.Data.SQLite.dll加密过的数据库. Database.Net:台湾人用.net开发的全能数据库管理工具,可以管理多种数据库,包括MSSQL.MYSQL.IBM DB2.Oracle.Access.Excel.OleDb.Odbc等十多种数据库(或数据接口),功能没有Navicat那么多,只包含

asp.net 备份和恢复数据库的方法示例_实用技巧

复制代码 代码如下: /**********************************************************************************  * * 功能说明:备份和恢复SQL Server数据库 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2007-1-1 * 当使用SQL Server时,请引用 COM组件中的,SQLDMO.dll组件 * 当使用Access中,请浏览添加引用以下两个dll *          引用C:\

asp.net Oracle数据库访问操作类_实用技巧

复制代码 代码如下: using System;using System.Collections;using System.Collections.Specialized;using System.Data;using System.Data.OracleClient;using System.Configuration;using System.Data.Common;using System.Collections.Generic;     /// <summary>    /// 数据访

.net连接Mysql封装类代码 可直接调用_实用技巧

微软的visual studio没有自带连接Mysql的驱动,要去网上下载一个mysql-connector-net-6.4.3驱动,然后安装就可以使用.下面是我封装好的连接数据库的类,直接调用即可. 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using Syst

aspnet_regsql.exe 工具注册数据库的图文方法_实用技巧

同时也提供了新的用来管理权限的控件,比如 Login 但是,使用这些功能的前提都是在注册网站的数据库这个基础之上, 所以这一次便来实现以下如何使用 ASPNET_REGSQL 来注册数据库, 在这里,并不会对基本的一些概念说清楚, 只是带着走一遍数据库的注册实现, 首先,注册所用的工具是 ASPNET_REGSQL , 这个工具在目录 C:\Windows\Microsoft.NET\Framework\v2.0.50727 下面 估计大家一定也都知道 ASPNET_REGIIS 这个工具的,

asp.net继承IHttpHandler接口实现给网站图片添加水印功能实例_实用技巧

本文实例讲述了asp.net继承IHttpHandler接口实现给网站图片添加水印功能.分享给大家供大家参考,具体如下: 先展示图片效果: 1. 在App_Code下添加类文件,命名为ImageSY 文件内容如下 public class ImageSY : IHttpHandler { public ImageSY() { // //TODO: 在此处添加构造函数逻辑 // } #region IHttpHandler 成员 public bool IsReusable { get { ret