mfc连接ACCESS2010及以上版本,部分“MicrosoftC++异常”处理
2016-05-21 08:05
746 查看
做MFC程序存ACCESS2010时无意间发现执行insert和update语句时出现“MicrosoftC++异常”提示,代码如下。(代码手打部分省略)
CString strCnn;
strCnn.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Date Source=D:\\Test.accdb"));
AfxOleInit();
::CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pConnection->Open((_bstr_t)strCnn,"","",NULL);
}
catch (_com_error e)
{ 省略}
char buf[512];
CString buf1="insert into info (name,age)values('xiaoming','11')";
memcpy(buf,buf1,buf.GetLength());
buf[buf.GetLength()]='\0';
try
{
m_pConnection->Execute(buf,NULL,adCmdText);
//Debug调试,单步执行到此处数据添加成功,程序正常运行,但是提示一下两条信息
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
}
catch(_com_error e)
{
AfxMessageBox(_T("失败"));
return;
}
头文件中引用
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEnd")
定义
_ConnectionPtr m_pConnection
_RecordsetPtr m_pRecordset
/////////////////////////////////////////////////////////////////////////////////////
当程序第一次执行 m_pConnection->Execute(buf,NULL,adCmdText); 时就会提示以下两条信息
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
使用try...catch...并没有捕获到这个异常,语句执行成功。出于好奇同样的程序使用access2007则无异常提示,使用access2003更改“Microsoft.Jet.OLEDB.4.0”连接字符串后无异常。
由此联想到是新版本的ACCESS数据库更新造成相关代码有所改变或者是动态库调整,顺着这一思路在网上无意间发现一个名为“access database engine”数据库访问引擎的软件,以前版本没有用过,查找相关介绍如下
access database engine 帮助现有的 Microsoft Office 文件(例如 Microsoft Office Access 2010(*.mdb 和 *.accdb)和 Microsoft Office Excel 2010(*.xls、*.xlsx 和 *.xlsb)文件)与其他数据源(例如 Microsoft SQL Server)之间传输数据。 还支持与现有文本文件建立连接。 此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与
Office 文件格式连接的应用程序时使用。
抱着试试看的想法进行测试发现之前的异常已经没有了,由此发现新版本的access数据库使用需要access database engine访问引擎的支持。
大家需要时可以在网上搜索使用匹配的“access database engine”软件版本。
CString strCnn;
strCnn.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Date Source=D:\\Test.accdb"));
AfxOleInit();
::CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pConnection->Open((_bstr_t)strCnn,"","",NULL);
}
catch (_com_error e)
{ 省略}
char buf[512];
CString buf1="insert into info (name,age)values('xiaoming','11')";
memcpy(buf,buf1,buf.GetLength());
buf[buf.GetLength()]='\0';
try
{
m_pConnection->Execute(buf,NULL,adCmdText);
//Debug调试,单步执行到此处数据添加成功,程序正常运行,但是提示一下两条信息
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
}
catch(_com_error e)
{
AfxMessageBox(_T("失败"));
return;
}
头文件中引用
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEnd")
定义
_ConnectionPtr m_pConnection
_RecordsetPtr m_pRecordset
/////////////////////////////////////////////////////////////////////////////////////
当程序第一次执行 m_pConnection->Execute(buf,NULL,adCmdText); 时就会提示以下两条信息
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。
使用try...catch...并没有捕获到这个异常,语句执行成功。出于好奇同样的程序使用access2007则无异常提示,使用access2003更改“Microsoft.Jet.OLEDB.4.0”连接字符串后无异常。
由此联想到是新版本的ACCESS数据库更新造成相关代码有所改变或者是动态库调整,顺着这一思路在网上无意间发现一个名为“access database engine”数据库访问引擎的软件,以前版本没有用过,查找相关介绍如下
access database engine 帮助现有的 Microsoft Office 文件(例如 Microsoft Office Access 2010(*.mdb 和 *.accdb)和 Microsoft Office Excel 2010(*.xls、*.xlsx 和 *.xlsb)文件)与其他数据源(例如 Microsoft SQL Server)之间传输数据。 还支持与现有文本文件建立连接。 此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与
Office 文件格式连接的应用程序时使用。
抱着试试看的想法进行测试发现之前的异常已经没有了,由此发现新版本的access数据库使用需要access database engine访问引擎的支持。
大家需要时可以在网上搜索使用匹配的“access database engine”软件版本。
相关文章推荐
- C++抽象类
- C++代理
- leetcode %15 in cpp
- c语言中的0
- C++学习基础篇 —— 引用(&)的用法和应用
- C语言第十七篇:size_t 数据类型
- c++实验6——数组操作
- C++作业6
- [C++]Json 学习笔记
- c++基础学习之深拷贝
- C++插件化开发,插件化系统
- C++11: std::call_once和std::one_flag
- C++ STL 基础及应用(1) STL历史、组成和使用方法
- c++作业6
- C++第六次作业
- C动态字符串,动态开辟内存空间相关 malloc realloc 用法
- 【LeetCode-190】 Reverse Bits(C++)
- C++ STL 基础及应用(0) 目录
- C++第六次实验——数组操作
- 【New AKOJ】1016: 【C语言训练】委派任务*