在VC++中如何从数据库中读取数据和向数据库中写入数据

在VC++中如何从数据库中读取数据和向数据库中写入数据,第1张

#include "stdafx.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=MSDASQL.1Persist Security Info=FalseUser ID=***Data Source=***"

m_pConnection->Open(strConnect,"","",adModeUnknown)

}

// 捕捉异常

catch(_com_error e)

{

// 显示错误信息

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(e.Description())

}

// 返回记录集

return m_pRecordset

}

// 执行SQL语句,Insert Update _variant_t

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)

{

//_variant_t RecordsAffected

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(e.Description())

return false

}

}

void ADOConn::ExitConnect()

{

// 关闭记录集和连接

if (m_pRecordset != NULL)

m_pRecordset->Close()

m_pConnection->Close()

// 释放环境

::CoUninitialize()

}

VC下利用ADO连接Access数据库

#include <iostream.h>

#import "c:\\program files\\common files\\system\\ado\\msado15.dll" no_namespace rename ("EOF", "adoEOF")

int main(){

//使用ADO连接数据库...

//---------------------------------------------------------------------------------

_ConnectionPtr m_pConnection

CoInitialize(NULL)

m_pConnection.CreateInstance(__uuidof(Connection))

// 在ADO *** 作中建议语句中要常用try...catch()来捕获错误信息,

// 因为它有时会经常出现一些想不到的错误。

try

{

// 打开本地Access库db1.mdb

m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0Data Source=db1.mdb","","",adModeUnknown)

}

catch(_com_error e)

{

cout<<"数据库连接失败,确认数据库db1.mdb是否在当前路径下!"<<endl

return FALSE

}

//-------------------------------------------------------------------------------------

//建立数据集

//-------------------------------------------------------------------------------------

_RecordsetPtr m_pRecordset

m_pRecordset.CreateInstance(__uuidof(Recordset))

// 在ADO *** 作中建议语句中要常用try...catch()来捕获错误信息,

// 因为它有时会经常出现一些意想不到的错误。

try

{

m_pRecordset->Open("SELECT * FROM Home2",

m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针

adOpenDynamic,

adLockOptimistic,

adCmdText)

}

catch(_com_error *e)

{

//AfxMessageBox(e->ErrorMessage())

cout<<e->ErrorMessage()<<endl

}

//--------------------------------------------------------------------------------------

//读取数据

//--------------------------------------------------------------------------------------

_variant_t var

char *strID,*strX,*strY

float X,Y

try

{

if(!m_pRecordset->BOF)

m_pRecordset->MoveFirst()

else

{

cout<<"表内数据为空"<<endl

return 1

}

// 读入库中各字段并加入列表框中

while(!m_pRecordset->adoEOF)

{

var = m_pRecordset->GetCollect("ID")

if(var.vt != VT_NULL)

strID= _com_util::ConvertBSTRToString((_bstr_t)var)//_variant_t转字符串

var = m_pRecordset->GetCollect("X")

if(var.vt != VT_NULL)

strX=_com_util::ConvertBSTRToString((_bstr_t)var)

var = m_pRecordset->GetCollect("Y")

if(var.vt != VT_NULL)

strY=_com_util::ConvertBSTRToString((_bstr_t)var)

cout<<strID<<"is"<<strX<<" "<<strY<<endl

m_pRecordset->MoveNext()

}

}

catch(_com_error *e)

{

cout<<e->ErrorMessage()<<endl

}

//--------------------------------------------------------------------------------------

//关闭数据集

m_pRecordset->Close()

m_pRecordset = NULL

//--------------------------------------------------------------------------------------

//关闭数据库连接

//--------------------------------------------------------------------------------------

if(m_pConnection->State)

m_pConnection->Close()

m_pConnection= NULL

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6808764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存