使用ADO技术访问SQL 数据库

VC++6.0下使用ADO技术访问SQL 数据库(一、ADO类和数据库表类的建立)

关键词 ADO,SQL                                          

*********************************************************************************************
1. ADOConn功能类的引入
*********************************************************************************************
// ADOConn.h: interface for the ADOConn class.
//
//
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
#if !defined(AFX_ADOCONN_H__20D9D06A_E099_4B1C_99DD_5B1F11B3A313__INCLUDED_)
#define AFX_ADOCONN_H__20D9D06A_E099_4B1C_99DD_5B1F11B3A313__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class ADOConn 
{

public:
 _ConnectionPtr m_pConnection;
 _RecordsetPtr m_pRecordset;
public:
 ADOConn();
 virtual ~ADOConn();
 void OnInitADOConn();
 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
 BOOL ExecuteSQL(_bstr_t bstrSQL);
 void ExitConnect();
};

#endif // !defined(AFX_ADOCONN_H__20D9D06A_E099_4B1C_99DD_5B1F11B3A313__INCLUDED_)
--------------------------------------------------------------------------------------------
// ADOConn.cpp: implementation of the ADOConn class.
//数据库连接、读记录及断开操作
//

#include "stdafx.h"
#include "CheckMan.h"
#include "ADOConn.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//
// Construction/Destruction
//

ADOConn::ADOConn()
{
}

ADOConn::~ADOConn()
{
}

//初始化——连接数据库
void ADOConn::OnInitADOConn()
{
 // 初始化OLE/COM库环境
 ::CoInitialize(NULL);  
 try
 {
  // 创建Connection对象
  m_pConnection.CreateInstance("ADODB.Connection");
  // 设置连接字符串,必须是BSTR型或者_bstr_t类型
  _bstr_t strConnect = "Provider=SQLOLEDB;Server=127.0.0.1;Database=basename;uid=sa;pwd=pwd;";
  m_pConnection->Open(strConnect,"","",adModeUnknown);
 }
 // 捕捉异常
 catch(_com_error e)
 {
  AfxMessageBox("数据库连接失败,请开启数据库服务!");
     PostQuitMessage(0);
  //AfxMessageBox(e.Description());
 }
}

// 执行查询
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
 try
 {
  // 连接数据库,如果Connection对象为空,则重新连接数据库
  if(m_pConnection==NULL)
    OnInitADOConn();
  // 创建记录集对象
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  // 取得表中的记录
  m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 }
 // 捕捉异常
 catch(_com_error e)
 {
  AfxMessageBox("数据库记录读取失败!");
     PostQuitMessage(0);
  // 显示错误信息
  //AfxMessageBox(e.Description());
 }
 // 返回记录集
 return m_pRecordset;
}

// 执行SQL语句,Insert Update _variant_t
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
 try
 {
  // 是否已经连接数据库
  if(m_pConnection==NULL)
    OnInitADOConn(); 
  // Connection对象的Execute方法:(_bstr_t CommandText,
  // VARIANT * RecordsAffected, long Options )
  // 其中CommandText是命令字串,通常是SQL命令。
  // 参数RecordsAffected是操作完成后所影响的行数,
  // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
  // adCmdProc-存储过程;adCmdUnknown-未知
  m_pConnection->Execute(bstrSQL,NULL,adCmdText);
  return true;
 }
 catch(_com_error e)
 {
  AfxMessageBox("数据库SQL语句执行失败!");
     PostQuitMessage(0);
  //AfxMessageBox(e.Description());
  return false;
 }
}

void ADOConn::ExitConnect()
{
 // 关闭记录集和连接
 if(m_pRecordset!=NULL)
  m_pRecordset->Close();
 m_pConnection->Close();
 // 释放环境
 ::CoUninitialize();
}

*********************************************************************************************
2. 建立数据库中表对应的表类,将表中的各个要操作的列都以变量的形式在类中再现,注意要保证对应的数据结构相通,例如SQL server中的 char n 类型对应VC++中的CString类型等。然后建立要操作的功能对应的功能函数,如sql_select(),sql_insert() 等等。
*********************************************************************************************
--------------------------------------------------------------------------------------------
2.1 INSERT 插入
--------------------------------------------------------------------------------------------
void Ctable::sql_insert()
{
 ADOConn m_AdoConn;
 m_AdoConn.OnInitADOConn();
 _bstr_t vSQL;
//将各非字符串的数据转换为字符串
   CString str_vlong,str_vint,str_vfloat;
 str_tjxh.Format("%ld",tjxh);
 str_yetl.Format("%d",yetl);
 str_jzsly.Format("%f",jzsly);
//插入信息
 vSQL="INSERT INTO table(lint,llong,lfloat,lstring,lchar)VALUES ("+vint+","+vlong+","+vfloat+",'"+vstring+"','"+vchar+"')";  //attention! 字符串的书写,见后面说明
 m_AdoConn.ExecuteSQL(vSQL); 
 m_AdoConn.ExitConnect();
 MessageBox(NULL,"保存体检信息成功!" , "提示", 0);
 
}
--------------------------------------------------------------------------------------------
2.2 SELECT查询
--------------------------------------------------------------------------------------------
void Ctable::sql_select(CString str)
{
  ADOConn m_AdoConn;
  m_AdoConn.OnInitADOConn();
  _bstr_t vSQL;
  vSQL = "SELECT * FROM table WHERE list="+str;  //不用对str加''
  _RecordsetPtr m_pRecordset;
  m_pRecordset=m_AdoConn.GetRecordSet(vSQL);
  if(m_pRecordset->adoEOF==1) 
    AfxMessageBox("无法找到该数据记录!" );
  else      
  {
  vint=atoi((_bstr_t)m_pRecordset->GetCollect("lint"));   //int 型读取
         tjxh=atol((_bstr_t)m_pRecordset->GetCollect("tjxh"));   //long 型读取
  lysly=atof((_bstr_t)m_pRecordset->GetCollect("yk_lysly"));// float 型读取
         ch=*(char*)((_bstr_t)m_pRecordset->GetCollect("ch"));  //char 读取
         str=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("str"); //char n,varchar n,string 的读取          
 }
 m_AdoConn.ExitConnect();
}
--------------------------------------------------------------------------------------------
2.3 UPDATE 更新
--------------------------------------------------------------------------------------------
void Ctable::sql_update()
{
 ADOConn m_AdoConn;
 m_AdoConn.OnInitADOConn();
 _bstr_t vSQL;

 //将各非字符串的数据转换为字符串
   CString str_vlong,str_vint,str_vfloat;
 str_vlong.Format("%ld",vlong);
 str_vint.Format("%d",vint);
 str_vfloat.Format("%f",vfloat);
 //更新数据,注意第一个加号不可以是char
 vSQL= "UPDATE table SET lstring='"+vstring+"',lchar ='" +vchar+"',lint=" +str_vint+ ","lfloat=" +str_vfloat+   "WHERE list='" +list+ "' ";
 m_AdoConn.ExecuteSQL(vSQL); 
 m_AdoConn.ExitConnect();
 MessageBox(NULL,"更新记录成功!" , "提示", 0);
}
--------------------------------------------------------------------------------------------
2.4 DELETE 删除
--------------------------------------------------------------------------------------------
void Ctable::sql_delete(CString str)
{
 //连接数据库
 ADOConn m_AdoConn;
 m_AdoConn.OnInitADOConn();
 _bstr_t vSQL;

 //设置DELETE语句
 vSQL = "DELETE FROM hit3D WHERE list='"+str+"' ";
 //执行DELETE语句 
 m_AdoConn.ExecuteSQL(vSQL);
 
 //断开与数据库的连接
 m_AdoConn.ExitConnect();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值