c语言如何使用access数据库

c语言如何使用access数据库,第1张

1、C/C++与数据库交互,像 mssql/ mysql / oracle 等,一般都有成熟的第三方库,这些库里面无非就是封装了与数据库通讯的方式和通讯协议搜一下要用的数据库相关的 API 文档,会说得很清楚任何文件都是二进制数据,关键是数据存储的组织方式通用扩展名的文件,像gif/doc/jpg/wav,格式都是固定的。

2、举个例子,连接SQL:

// 打开数据库

strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0Data Source=%sJet OLEDB:Database Password=%s"), m_strUnEntryptMdbFilePath,m_strMDBPassword)

// 创建连接

HRESULT hr = m_pConnection.CreateInstance(_uuidof(Connection))

_ConnectionPtr m_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified)

// 声明表单指针

_RecordsetPtr pBandRecordset

pBandRecordset.CreateInstance(__uuidof(Recordset))

// 执行语句

CString strSQL(L"SELECT * FROM [Band]")

m_pConnection->Execute((LPCTSTR)strSQL,NULL,0)

// 提取某一项 例如BandInfo

int iBandInfo = wcscmp(colum, L"BandInfo")

while(!recordsetPtr->adoEOF)

{

var = recordsetPtr->GetCollect(colum)

if(var.vt != VT_NULL)

strName = (LPCSTR)_bstr_t(var)

recordsetPtr->MoveNext()

}

C++利用ado编程,首先要引用一个库文件

#import

"c:\program

files\common

files\system\ado\msado15.dll"no_namespaces

rename("EOF"

adoEOF")

然后用AfxOleInit()初始化组件

定义一个_ConnectionPtr

指针,然后利用这个指针打开数据库字符串,

你去网个看一下,很多教程的

http://hi.baidu.com/lninglove/blog/item/3f6cec22959e4ca34723e833.html

使用C++编程语言,连接对Access数据库进行 *** 作,常用的方法有DAO和ADO两种方式,本文将介绍采用ADO的方式方位Access数据库。

先介绍一下ADO,ADO (ActiveX Data Objects) 是一个用于存取数据源的COM组建。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。

在程序的开始,首先导入所需要的库:#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") ,这里重命名EOF是必要的,因为典型的VC应用都已经定义了EOF作为常数-1。

完整的程序如下,以注释的形式来对程序进行解释:

_ConnectionPtr m_pConnection //连接access数据库的链接对象

_RecordsetPtr m_pRecordset //结果集对象

CoInitialize(NULL) //初始化

m_pConnection.CreateInstance(__uuidof(Connection))//实例化对象

//连到具体某个mdb ,此处的的Provider语句因Access版本的不同而有所不同。

try

{

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

}

catch(_com_error e)

{

AfxMessagebox(_T("数据库连接失败!"))

return

}

m_pRecordset.CreateInstance(__uuidof(Recordset))//实例化结果集对象

//执行sql语句

try

{

CString sql= _T("select * from Patient")

m_pRecordset->Open(sql, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText)

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage())

if(m_pConnection->State)

{

m_pConnection->Close()

m_pConnection= NULL

}

return

}

//处理结果集

try

{

//若结果为空,结束

if(m_pRecordset->BOF)

{

AfxMessageBox_T(("表内数据为空!"))

if(m_pConnection->State)

{

m_pRecordset->Close()

m_pRecordset = NULL

m_pConnection->Close()

m_pConnection= NULL

}

return

}

//游标定位到第一条记录

m_pRecordset->MoveFirst()

_variant_t var //从结果集中取出的数据放到var中

char *name

while(!m_pRecordset->adoEOF)

{

var= m_pRecordset->GetCollect("Name") //要取字段的名称。

if(var.vt != VT_NULL)

{

name= _com_util::ConvertBSTRToString((_bstr_t)var) //转换成char*类型

}

string MyName = name

m_pRecordset->MoveNext()

}

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMssage())

}

//退出程序时的处理 ,关闭数据库的相关 *** 作

if(m_pConnection->State)

{

m_pRecordset->Close()

m_pRecordset = NULL

m_pConnection->Close()

m_pConnection= NULL

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存