我遇到的问题是这样的,我的公司系统中的一个ActiveX控件需要通过ADO连接数据库,其实就是Oracle 10g。我公司系统中的一个ActiveX控件需要通过ADO连接数据库,其实就是Oracle 10g。在客户电脑的IE8下可以正常使用,但是IE8升级到IE11后,就不能连接数据库了。我看表面上没有变化:连接字符串不变,代码不变,Oracle还是老的那个。有谁能告诉我是什么原因导致这个问题?
ps.我们使用的是Carlos Antón开发的ADO2。我们使用的是Carlos Antollini开发的ADO2,[email protected]。
谢谢你的评论。没有任何警告,我甚至不能从程序中提取错误或异常。它运行在win7上。ActiveX是我公司多年前开发的一个小控件。 用于连接数据库的核心代码如下。
strConnection = "Provider=OraOLEDB.Oracle";
strConnection += ";User ID=" + m_sUserName;
strConnection += ";Password=" + m_sPassword;
strConnection += ";Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)";
strConnection += "(HOST="+m_sSQLServerName+")(PORT=1521))";
strConnection += "(CONNECT_DATA=(SERVICE_NAME = " + m_sSQLDBName + ")))";
strConnection += ";Persist Security Info=False";
这个... strConnection
将作为参数馈送到 Open()
方式 _ConnectionPtr
对象 ADO
,连接代码是这样的。
m_pConnection->Open(strConnection , userId, password, NULL);
其中 m_pConnection
变种人 _ConnectionPtr
,一个指针 Connection
.
我很确定用户ID和密码都是正确的,我猜测连接错误可能与以下原因有关 Provider=OraOLEDB.Oracle
,比如dll丢失或注册问题?但我不能确定,我不知道ADO的底层机制。
2020.6.22补充:我在win10中也发现了同样的问题,看来不是IE的问题,msado15在某次更新后无法连接数据库。数据库连接部分的代码是。
_ConnectionPtr m_pConnection;
try
{
hr = m_pConnection->Open(_bstr_t(m_strConnection), _bstr_t(lpstrUserID), _bstr_t(lpstrPassword), NULL);
return hr == S_OK;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
在win7中工作正常,但在win10中会抛出异常,异常对象给出的信息如下。
_com_error &e:
m_hresult = E_FAIL
[0] = 0x536a8590 _com_error::`scalar deleting destructor'(unsigned int)
m_perrinfo = 0x013aaaa0
IUNKOWN
__vfptr = 0x532d120c
[0] = 0x533001e0
[1] = 0x533003c0
[2] = 0x532fedc0
m_pszMsg = 0x00000000 <Bad Ptr>
异常对象的描述是:
CADODataBase Error
Code = 80004005
Code meaning = undefined error
Source = OraOLEDB
Description = ORA-12154: TNS: unable to resolve given connection identifier