创建driver为oracle in OraHome92的数据源OracleTest,测试连接成功。
程序为:
_ConnectionPtr m_sDPADOConnection;
m_sDPADOConnection.CreateInstance("ADODB.Connection");
_bstr_t bstrConnectString = L"Provider=OraOLEDB.Oracle;Persist Security Info=False;Data Source=OracleTest";
_bstr_t bstrUserId = L"StockDB";
_bstr_t bstrPassword= L"StockDB";
try
{
hr = m_sDPADOConnection->Open(bstrConnectString, bstrUserId, bstrPassword, adModeUnknown);
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息 }
运行后错误信息为“未指定的错误”。
Provider=MSDAORA 也尝试过,现象相同。
请问各位我是哪里写错了。怎么写是正确的?
程序为:
_ConnectionPtr m_sDPADOConnection;
m_sDPADOConnection.CreateInstance("ADODB.Connection");
_bstr_t bstrConnectString = L"Provider=OraOLEDB.Oracle;Persist Security Info=False;Data Source=OracleTest";
_bstr_t bstrUserId = L"StockDB";
_bstr_t bstrPassword= L"StockDB";
try
{
hr = m_sDPADOConnection->Open(bstrConnectString, bstrUserId, bstrPassword, adModeUnknown);
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息 }
运行后错误信息为“未指定的错误”。
Provider=MSDAORA 也尝试过,现象相同。
请问各位我是哪里写错了。怎么写是正确的?
解决方案 »
- void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
- 关于注册表访问的问题!
- 一个directx的小问题
- CreateProcessWithLogonW 编译提示link2001错误
- 请问Ellipse()里面的参数的具体含义是什么?
- 如何截图:
- 请教高手:Vss中checkin和get version时自动标识版本怎么无法使用?
- 请大家帮忙!高手都快进!
- 求助(关于文件的转换。。。
- 八百里加急!!!答对者愿以身想许!!!!
- 怎样编程获得本机并口的起始地址?急!分不够,可以多开N贴
- 如何在菜单项前添加图标??
CoInitialize(NULL);
AfxOleInit();
现象相同。
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=5949
Provider=OraOLEDB.Oracle;Data Source=OracleTest;User ID=StockDB; Password=StockDB
_bstr_t bstrConnectString = L"Provider=OraOLEDB.Oracle;Data Source=OracleTest;User Id=StockDB;Password=StockDB;";
_bstr_t bstrUserId = L"";
_bstr_t bstrPassword= L"";
问题仍然存在.Persist Security Info = true 时问题相同,= yes或no 时错误变为"IDispatch error #3187";请问设置DSN时有什么需要修改的选项吗?我是把Data Source Name;TNS Service Name;User写上,下面的那些都没改。
请问这是什么原因?那数据源还有什么用处?如果我想在客户端运行程序,应该怎么做?
明天结贴给分。
// Á¬½ÓORACLEÊý¾Ý¿â·þÎñÆ÷º¯Êý, ·½Ê½£ºADO DB
bool CEx32Dlg::ConnectORAServer(CString DatabaseName, CString User, CString Password)
{
if((DatabaseName=="")||(User==""))
{
MessageBox("Á¬½ÓÊý¾Ý¿âµÄÊý¾Ý¿âÃû¡¢Óû§Ãû¾ù²»ÄÜΪ¿Õ£¬ÇëÖØÐÂÌîд","Á¬½ÓÊý¾Ý¿â",MB_OK+MB_ICONERROR);
return FALSE;
}
::CoInitialize(NULL);
_variant_t vFieldValue;
CString strFieldValue;
CString strConn,strConnectionString;
CString strUserName,strPassword,strServerName;
UpdateData(TRUE);
strConnectionString = "";
strUserName = m_strUser;
strPassword = m_strPassword;
strServerName = m_strDatabase;
strConn.Format("Provider=MSDAORA.1;"
"User ID=%s;Password=%s;Data Source=%s;"
"Persist Security Info=True",
(LPCTSTR)strUserName,(LPCTSTR)strPassword,
(LPCTSTR)strServerName); // µÚÒ»´ÎʹÓÃm_pCon֮ǰ±ØÐëÏȳõʼ»¯,·ñÔòm_pConΪ0
m_pCon.CreateInstance("ADODB.Connection");
m_pCon->PutCursorLocation(adUseClient);
m_pCon->ConnectionTimeout=20;
CConnectDlg *pDlg;
pDlg = new CConnectDlg;
pDlg->Create(IDD_CONNECTDLG);
pDlg->ShowWindow(SW_SHOW);
pDlg->UpdateWindow();
try
{
m_pCon->Open((LPCTSTR)strConn,
(LPCTSTR)strUserName,(LPCTSTR)strPassword,
adConnectUnspecified);
}
catch(...)
{
pDlg->ShowWindow(SW_HIDE);
delete pDlg;
MessageBox("Á¬½ÓÊý¾Ý¿âʧ°Ü£¡\n\nÇëÈ·ÈÏ\n 1.ÍøÂçÊÇ·ñÁ¬Í¨ \n 2.Êý¾Ý¿âÃû¡¢Óû§ÃûºÍÃÜÂëÊÇ·ñÕýÈ·\n 3.±¾µØoracle¿Í»§¶ËÊÇ·ñÒѾ­°²×°²¢ÕýÈ·ÅäÖÃ","Á¬½ÓÊý¾Ý¿â",MB_OK+MB_ICONERROR);
return FALSE;
}
pDlg->ShowWindow(SW_HIDE);
delete pDlg;
if(m_pCon->State)
{
return TRUE;
}
else
{
MessageBox("Á¬½ÓÊý¾Ý¿âʧ°Ü£¡","Á¬½ÓÊý¾Ý¿â",MB_OK+MB_ICONERROR);
return FALSE;
}
}//---------------------------------------------------------------------------------
// Á¬½Ó SQL SERVER Êý¾Ý¿â·þÎñÆ÷º¯Êý£¬·½Ê½: OLE DB
bool CEx32Dlg::ConnectSQLServer_OLEDB(CString DBAliasName, CString Catlog, CString User, CString Password)
{
_ConnectionPtr m_pConnection =NULL;
HRESULT hr;
///´´½¨Connection¶ÔÏó
hr = m_pConnection.CreateInstance("ADODB.Connection"); //Á¬½ÓSQL ServerÊý¾Ý¿â
if(SUCCEEDED(hr))
{
CString strConn;
strConn = "Provider=SQLOLEDB.1;Persist Security Info=False"
"; User ID=" + User +
"; Password=" + Password +
"; Initial Catalog="+ Catlog +
"; Data Source=sql2000";
try
{
hr = m_pConnection->Open(LPCTSTR(strConn),"","",adModeUnknown);
}
catch(...)
{
MessageBox("using oledb, Connect Failure!");
return FALSE;
}
if(hr == 0)
{
MessageBox("using oledb, Connect SUCCESS!");
return TRUE;
}
return FALSE;
}
return FALSE;
}//---------------------------------------------------------------------------------
// Á¬½Ó SQL SERVER Êý¾Ý¿â·þÎñÆ÷º¯Êý£¬·½Ê½: OLE DB
BOOL CEx32Dlg::ConnectSQLServer_ODBC(CString DBAliasName, CString Catlog, CString User, CString Password)
{
// TODO: Add your control notification handler code here
_ConnectionPtr m_pConnection =NULL;
HRESULT hr;
// ´´½¨Connection¶ÔÏó
CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
#ifdef _DEBUG
if (m_pConnection == NULL)
{
AfxMessageBox("Connection ¶ÔÏó´´½¨Ê§°Ü! ÇëÈ·ÈÏÊÇ·ñ³õʼ»¯ÁËCOM»·¾³\r\n");
}
#endif
ASSERT(m_pConnection != NULL);
hr = m_pConnection.CreateInstance("ADODB.Connection");
// Á¬½ÓSQL ServerÊý¾Ý¿â
if(SUCCEEDED(hr))
{
CString strConn;
strConn = "Driver={sql server};server=sql2000"
";database=" + Catlog +
";uid=" + User +
";pwd=" + Password + ";";
try
{
m_pConnection->Open(LPCTSTR(strConn), "", "", adModeUnknown);
}
catch(...)
{
MessageBox("Connect Failure!");
return FALSE;
} if(hr == 0)
{
MessageBox("Connect Success!");
return TRUE;
}
return FALSE;
}
return FALSE;
}
// 连接ORACLE数据库服务器函数, 方式:ADO DB
bool CEx32Dlg::ConnectORAServer(CString DatabaseName, CString User, CString Password)
{
if((DatabaseName=="")||(User==""))
{
MessageBox("连接数据库的数据库名、用户名均不能为空,请重新填写","连接数据库",MB_OK+MB_ICONERROR);
return FALSE;
}
::CoInitialize(NULL);
_variant_t vFieldValue;
CString strFieldValue;
CString strConn,strConnectionString;
CString strUserName,strPassword,strServerName;
UpdateData(TRUE);
strConnectionString = "";
strUserName = m_strUser;
strPassword = m_strPassword;
strServerName = m_strDatabase;
strConn.Format("Provider=MSDAORA.1;"
"User ID=%s;Password=%s;Data Source=%s;"
"Persist Security Info=True",
(LPCTSTR)strUserName,(LPCTSTR)strPassword,
(LPCTSTR)strServerName); // 第一次使用m_pCon之前必须先初始化,否则m_pCon为0
m_pCon.CreateInstance("ADODB.Connection");
m_pCon->PutCursorLocation(adUseClient);
m_pCon->ConnectionTimeout=20;
CConnectDlg *pDlg;
pDlg = new CConnectDlg;
pDlg->Create(IDD_CONNECTDLG);
pDlg->ShowWindow(SW_SHOW);
pDlg->UpdateWindow();
try
{
m_pCon->Open((LPCTSTR)strConn,
(LPCTSTR)strUserName,(LPCTSTR)strPassword,
adConnectUnspecified);
}
catch(...)
{
pDlg->ShowWindow(SW_HIDE);
delete pDlg;
MessageBox("连接数据库失败!\n\n请确认\n 1.网络是否连通 \n 2.数据库名、用户名和密码是否正确\n 3.本地oracle客户端是否已经安装并正确配置","连接数据库",MB_OK+MB_ICONERROR);
return FALSE;
}
pDlg->ShowWindow(SW_HIDE);
delete pDlg;
if(m_pCon->State)
{
return TRUE;
}
else
{
MessageBox("连接数据库失败!","连接数据库",MB_OK+MB_ICONERROR);
return FALSE;
}
}//---------------------------------------------------------------------------------
// 连接 SQL SERVER 数据库服务器函数,方式: OLE DB
bool CEx32Dlg::ConnectSQLServer_OLEDB(CString DBAliasName, CString Catlog, CString User, CString Password)
{
_ConnectionPtr m_pConnection =NULL;
HRESULT hr;
///创建Connection对象
hr = m_pConnection.CreateInstance("ADODB.Connection"); //连接SQL Server数据库
if(SUCCEEDED(hr))
{
CString strConn;
strConn = "Provider=SQLOLEDB.1;Persist Security Info=False"
"; User ID=" + User +
"; Password=" + Password +
"; Initial Catalog="+ Catlog +
"; Data Source=sql2000";
try
{
hr = m_pConnection->Open(LPCTSTR(strConn),"","",adModeUnknown);
}
catch(...)
{
MessageBox("using oledb, Connect Failure!");
return FALSE;
}
if(hr == 0)
{
MessageBox("using oledb, Connect SUCCESS!");
return TRUE;
}
return FALSE;
}
return FALSE;
}//---------------------------------------------------------------------------------
// 连接 SQL SERVER 数据库服务器函数,方式: OLE DB
BOOL CEx32Dlg::ConnectSQLServer_ODBC(CString DBAliasName, CString Catlog, CString User, CString Password)
{
// TODO: Add your control notification handler code here
_ConnectionPtr m_pConnection =NULL;
HRESULT hr;
// 创建Connection对象
CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
#ifdef _DEBUG
if (m_pConnection == NULL)
{
AfxMessageBox("Connection 对象创建失败! 请确认是否初始化了COM环境\r\n");
}
#endif
ASSERT(m_pConnection != NULL);
hr = m_pConnection.CreateInstance("ADODB.Connection");
// 连接SQL Server数据库
if(SUCCEEDED(hr))
{
CString strConn;
strConn = "Driver={sql server};server=sql2000"
";database=" + Catlog +
";uid=" + User +
";pwd=" + Password + ";";
try
{
m_pConnection->Open(LPCTSTR(strConn), "", "", adModeUnknown);
}
catch(...)
{
MessageBox("Connect Failure!");
return FALSE;
} if(hr == 0)
{
MessageBox("Connect Success!");
return TRUE;
}
return FALSE;
}
return FALSE;
}