
using System.Data.OleDb
class OleDbTest{
public static void Main()
{
//创建数据库连接
OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0Data Source=c:\\db1.mdb")
//创建command对象并保存sql查询语句
OleDbCommand aCommand = new OleDbCommand("select * from emp_test", aConnection)
try
{
aConnection.Open()
//创建datareader 对象来连接到表单
OleDbDataReader aReader = aCommand.ExecuteReader()
Console.WriteLine("This is the returned data from emp_test table")
//循环遍历数据库
while(aReader.Read())
{
Console.WriteLine(aReader.GetInt32(0).ToString())
}
//关闭reader对象
aReader.Close()
//关闭连接,这很重要
aConnection.Close()
}
//一些通常的异常处理
catch(OleDbException e)
{
Console.WriteLine("Error: {0}", e.Errors[0].Message)
}
}
}
成功运行这个程序的步骤
1.用msaccess创建一个名叫db1.mdb的数据库
2.创建一个名叫emp_test的表单
3.使它包含下列数据域
emp_code int
emp_name text
emp_ext text
4.将上面的代码保存到sample.cs文件中
5.确保数据库位于c:\并确保mdac2.6或是更新的版本已经被安装
6.编译运行
使用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
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)