刚学vc访问数据库,用的是ado访问,可能在连接方式上有问题,但是搞不明白,请大家指点一下以下的代码,多谢!
int TMyAdoDB::OpenMyOra()
{
HRESULT hr;
// hr = m_pConnection.CreateInstance("ADODB.Connection"); //这里应该是那种方式?
hr = m_pConnection.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr))
{
try
{
string strConnect = "Provider=OraOLEDB.Oracle;Data Source=10.10.3.190;User Id=user;Password=pass;";
//应该是这里出问题的,每次选择连接数据库时,就会发送错误报告,郁闷
m_pConnection->Open(strConnect.c_str(), "", "", adModeUnknown);
AfxMessageBox("连接数据库成功");
}
catch (_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库文件是否在当前路径下");
return TMYADODB_FALSE_OPEN_DB;
}
catch (...)
{
AfxMessageBox("未知错误!");
return TMYADODB_FALSE_OPEN_DB;
}
return TMYADODB_SUCCESS;
}
else
{
AfxMessageBox("hr created failed!");
return TMYADODB_FALSE_HR_FAILED;
}
}
int TMyAdoDB::OpenMyOra()
{
HRESULT hr;
// hr = m_pConnection.CreateInstance("ADODB.Connection"); //这里应该是那种方式?
hr = m_pConnection.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr))
{
try
{
string strConnect = "Provider=OraOLEDB.Oracle;Data Source=10.10.3.190;User Id=user;Password=pass;";
//应该是这里出问题的,每次选择连接数据库时,就会发送错误报告,郁闷
m_pConnection->Open(strConnect.c_str(), "", "", adModeUnknown);
AfxMessageBox("连接数据库成功");
}
catch (_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库文件是否在当前路径下");
return TMYADODB_FALSE_OPEN_DB;
}
catch (...)
{
AfxMessageBox("未知错误!");
return TMYADODB_FALSE_OPEN_DB;
}
return TMYADODB_SUCCESS;
}
else
{
AfxMessageBox("hr created failed!");
return TMYADODB_FALSE_HR_FAILED;
}
}
string strConnect = "Provider=OraOLEDB.Oracle;Data Source=10.10.3.190;User Id=user;Password=pass;";
//应该是这里的问题,下面哪个open也有问题么,很不明白
m_pConnection->Open(strConnect.c_str(), "", "", adModeUnknown);
Data Source不是一个IP地址,这个名称应该是在tnsname.ora里面定义的,该文件路径如
C:\Oracle\Ora81\network\ADMIN
下面是其中一个定义HOST可以是IP或者计算机名
上面一个大写的ORCL是本地调用时用的sidname(连接串中使用)
下面一个SERVICE_NAME = orcl是在remote-8e2903964定义的一个sidnameORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = remote-8e2903964)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
hr = m_pConnection.CreateInstance("ADODB.Connection");
出现问题,unhandled exception in MyPro.exe :0xc0000005:Access Violation
不明白
_bstr_t bstrCnnString = L"Provider=OraOLEDB.Oracle;Data Source=10.10.3.190;User Id=user;Password=pass;";
m_pConnection->Open(bstrCnnString, "", "", adModeUnknown);
另外多问个问题,为什么一定要_bstr_t类型?