我在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;