您的位置:首页 > 数据库

使用ADO技术访问SQL 数据库

2013-01-25 16:30 561 查看

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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: