使用ADO技术访问SQL 数据库
来源:互联网 发布:查看数据库用户 编辑:程序博客网 时间:2024/05/01 01:23
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();
}
- 使用ADO技术访问SQL 数据库
- VC++6.0下使用ADO技术访问SQL 数据库
- VC使用ADO技术访问数据库
- ADO技术访问数据库
- ADO数据库访问技术
- ADO数据库访问技术
- VC使用ADO访问sql server数据库
- ADO 访问SQL数据库
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- VC++的ADO技术访问sql server 2000数据库
- 使用ADO访问数据库
- ADO数据库访问技术概述
- 数据库访问技术之ADO
- ADO.NET数据库访问技术
- ADO.NET数据库访问技术
- ADO数据库访问技术总结
- 删除无限级树形属于同一个分类下的所有记录
- UML——用例
- 富士通半导体携手奇瑞汽车
- 解决Firefox不兼容 window.event 问题
- 使用boost::circular_buffer_space_optimized实现OTL数据库连接池
- 使用ADO技术访问SQL 数据库
- mongodb与mysql命令对比
- socket 配置选项
- php解决表单重复提交问题
- 谈谈SIFT、PCA-SIFT、SURF及我的一点思考
- FlewViewer对于地图的底图展现(借前一篇的底图加载而来)
- log4j.properties配置详解
- what is setTexCoordArray
- C#中WebService针对Oracle的事务并发出现异常解决方法