当前位置: 代码迷 >> VC >> CLR程序怎么连接acess数据库啊
  详细解决方案

CLR程序怎么连接acess数据库啊

热度:4708   发布时间:2013-02-25 00:00:00.0
CLR程序如何连接acess数据库啊?
我在stdafx.h中添加了
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")

但是报错啊:
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!

Program: d:\C++\MFCCTYY\debug\MFCCTYY.exe
File: dbgheap.c
Line: 1414

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
---------------------------
中止(A) 重试(R) 忽略(I)  
---------------------------

我就是想用CLR里面的windows窗体应用程序用acess数据库,大家谁能给段代码啊?小弟不胜感激啊

------解决方案--------------------------------------------------------
//我的access数据库是2007版的,表名字是Contact ,只有两列Exten和Name,下边是代码,功能是在窗口中显示表记录结果
//创建个连接对象
_ConnectionPtr m_pConnection;
//对连接进行初始化
CoInitialize(NULL);

m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\\test.accdb","","",adModeUnknown);

}
catch(_com_error e) //捕捉异常
{
Console::WriteLine(e.ErrorInfo());
Sleep(1000);
printf("数据库连接失败,确认数据库是否在当前路径下!");
Sleep(1000);
return -1;
}
//数据集对象
_RecordsetPtr m_pRecordset;
//实例化数据集
m_pRecordset.CreateInstance(__uuidof(Recordset));
try{
m_pRecordset->Open("SELECT * FROM Contact",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error *e)
{
Console::WriteLine(e->ErrorMessage());
Sleep(1000);
return -1;
}

_variant_t var;
char *vExten,*name;

try//得到表,但表里不一定有数据
{
if(!m_pRecordset->BOF) //数据表里是是有数据
m_pRecordset->MoveFirst(); //将游标(数据集在数据库的叫法)移动到一第一条记录
else {
printf("表内数据为空");
return 1;
}


while(!m_pRecordset->adoEOF) 
{
var = m_pRecordset->GetCollect("Exten"); //这是获取表中字段的一种方法“ID”为表字段名
if(var.vt != VT_NULL) //判断记录在该有没数据
vExten= _com_util::ConvertBSTRToString((_bstr_t)var); //由于得到的数据可能不是字符传 这里要转换将他们转成字符串,从而可以在屏幕上显示

var = m_pRecordset->GetCollect("vName");
if(var.vt != VT_NULL)
name=_com_util::ConvertBSTRToString((_bstr_t)var);
printf("%s is %s\n",vExten,name);

m_pRecordset->MoveNext(); //游标向走向下条记录
}
}
catch(_com_error *e) //捕获异常
{
Console::WriteLine(e->ErrorMessage()); //如有错误 ,将错误输出
return -1;
}
  
m_pRecordset->Close();
m_pRecordset = NULL;

if(m_pConnection->State)
m_pConnection->Close();
m_pConnection= NULL;