MFC ODBC SQLConfigDataSource() 未处理的异常
Posted
技术标签:
【中文标题】MFC ODBC SQLConfigDataSource() 未处理的异常【英文标题】:MFC ODBC SQLConfigDataSource() Unhandled Exception 【发布时间】:2019-09-27 16:43:40 【问题描述】:我正在尝试更新旧的 c++ MFC 程序,而当我尝试创建 DSN 时,SQLConfigDataSource 会导致未处理的异常。错误消息说:
0x00007FFC97D89129 (KernelBase.dll) 处的未处理异常: 0x0000087A(参数:0xFFFFFFFF887A0001、0x0000000000000053)
代码运行正常,功能正常,但我似乎无法摆脱这个错误。
int mlen;
char* szDesc = new char[256];
sprintf_s(szDesc, 256, "DSN=%s?DBQ=%s?FIL=MicrosoftAccess?",
IV_DATABASE_NAME, // DSN name
sDBPath); // full file name for accdb file
mlen = strlen(szDesc);
for (int i = 0; i < mlen; i++)
if (szDesc[i] == '?')
szDesc[i] = '\0';
SQLConfigDataSource(NULL, ODBC_ADD_DSN,
"Microsoft Access Driver (*.mdb, *.accdb)",
(LPCSTR)szDesc);
delete szDesc;
【问题讨论】:
【参考方案1】:SQLConfigDataSource
的参数格式不正确。见:
SQLConfigDataSource Function
还有:
ConfigDSN Function
每一对都以一个空字节结束,整个列表是 以空字节终止。 (即两个空字节标记结束 列表。)
我已经让这个工作了十多年了,称之为:
if( ! bOk )//failed to open the default database for lack of DSN
TRACE("Could not find DSN\n");
BOOL ret= SQLConfigDataSource(
NULL,
ODBC_ADD_DSN,
(LPSTR) "Microsoft Access Driver (*.mdb)\0",
(LPSTR) "DSN=MS Access Database\0"
"Description=MS Access Database\0"
);
if( ! ret )
AfxMessageBox( _T("The 'Data Source Name' failed to install\nPlease call My Company\n800-555-5555") );
return FALSE;
请注意,前两个额外的空值是多余的,但它们没有害处。但最后一行遵循两个 null,列表结尾,规则。
"Description=MS Access Database\0"
您应该检查SQLConfigDataSource
的返回值。您可以按照诊断中的说明致电SQLInstallerError
。此外,cmets 声明关键字和值不应包含?
。
【讨论】:
【参考方案2】:安装 Microsoft Access 数据库引擎 2016 Redistributable 时发生错误。我安装了 2010 Redistributable,它运行完美,没有任何问题。
【讨论】:
以上是关于MFC ODBC SQLConfigDataSource() 未处理的异常的主要内容,如果未能解决你的问题,请参考以下文章
我在哪里可以获得有关 ODBC 和 Access 数据库的高质量信息?