VC中连接mdb数据库及其数据读取方法

最近在做一个兼职,涉及到利用vc连接mdb数据库的问题。

 

先介绍一下第一种方法:

_ConnectionPtr m_pConnection; CoInitialize(NULL); //对连接进行初始化 m_pConnection.CreateInstance(__uuidof(Connection)); try { m_pConnection->Open(_T("Provider=Microsoft.JET.OLEDB.4.0;Data Source=test.mdb"),_T(""),_T(""),adModeUnknown); //AfxMessageBox(_T("数据文件读写成功!")); return 1; } catch(_com_error e) //捕捉异常 { e.Description(); MessageBox(_T("数据库连接失败,确认数据库data.mdb是否在当前路径下!!")); return 0; }

test.mdb只需要放在工程目录下即可运行成功。

但这个程序有点问题,我再加上密码的时候就出问题了,始终连接失败,我也不是很清楚原因,猜测是数据源的问题或者用户名吧。

 

于是产生了第二种方法,其实归根结底是一种方法,都是ado的方法,但这个程序我加上密码很容易就成功了。

_ConnectionPtr m_pConnection; CoInitialize(NULL); //对连接进行初始化 m_pConnection.CreateInstance(__uuidof(Connection)); try { m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Jet OLEDB:DataBase Password=123456;Mode=Share Deny Read|Share Deny Write","","",0); return 1; } catch(_com_error e) //捕捉异常 { e.Description(); MessageBox(_T("数据库连接失败,确认数据库data.mdb是否在当前路径下!!")); return 0; }

至此,如果test.mdb放在生成的exe文件夹下,运行exe就可以连接成功了。

这个方法也有它的弊端,第一种方式允许多次连接,即使未关闭上一次连接;第二种就不行了,只能连接一次,如果多次连接将会报错。

 

=========================传说中的分割线=============================

下面再介绍下采用mdb数据库读取数据的方法:

try{ _RecordsetPtr rs; sql= "select * from test where datevalue(ttime) = #"+date1+"#"; rs->Open(_com_util::ConvertStringToBSTR(sql), m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic, adLockOptimistic, adCmdText); }catch(_com_error e) {}

此时,sql语句执行成功,结果返回在rs中。

要用的时候直接用下列语句取就可以了:

(char*)_bstr_t(rs->GetCollect("ttime"))

注意到前面加了部分用来转换类型的,最终产生的是char * 类型。

你可能感兴趣的:(sql,数据库,Date,null,database,exe)