訪問數據庫的代碼如下:
void CCRDBSDlg::ConnectDB()
{
//初始化Connection指針
m_pConnection.CreateInstance(_uuidof(Connection));
//初始化Recordset指針
m_pRecordset.CreateInstance(_uuidof(Recordset));
//初始化Command指針
m_pCommand.CreateInstance(("ADODB.Command"));
char szPath[255];
//獲取應用程序完全路徑
::GetModuleFileName(NULL,szPath,255);
CString strFileName = szPath;
//獲取所在的目錄名稱
strFileName.Delete(strFileName.ReverseFind('\\')+1,
strFileName.GetLength ()-strFileName.ReverseFind('\\')-1);
//構造配置文件的完全路徑
strFileName +="CRDBS.ini";
TCHAR sz[101];
memset(sz,0,sizeof(TCHAR)*101);
//獲取配置文件中數據庫數據源的值,如果沒有,默認值為LUOJIDB
GetPrivateProfileString(_T("General"),_T("數據庫數據源"),_T("LUOJIDB"),sz,100,strFileName);
CString strSource(sz);
GetPrivateProfileString(_T("General"),_T("數據庫用戶"),_T("luoji"),sz,100,strFileName);
CString strUser(sz);
GetPrivateProfileString(_T("General"),_T("數據庫密碼"),_T("zjuluoji"),sz,100,strFileName);
CString strPwd(sz);
try
{
CString strConnect;
strConnect.Format(_T("Provider=MSDAORA.1;Password=%s;Data Source=%s;UserID=%s;Data Source=%s;"),strPwd,strUser,strSource);
//連接數據庫
m_pConnection->Open(
_bstr_t((LPCTSTR)strConnect),
_bstr_t(L""),
_bstr_t(L""),
adConnectUnspecified
);
}
//異常處理
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
MessageBox("It's so easy!","but error is here!",MB_OK);
}
}
執行到Open()就拋出異常,並報錯IDispatch error #3149
大家幫偶找找原因?
41 个解决方案
#1
strConnect.Format(_T("Provider=MSDAORA.1;Password=%s;Data Source=%s;UserID=%s;Data Source=%s;"),strPwd,strUser,strSource);
這句話寫錯了吧 ??
為什么有兩個data source 啊 ??
#2
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=5949
#3
strConnect.Format(_T("Provider=MSDAORA.1;Password=%s;Data Source=%s;UserID=%s;Data Source=%s;"),strPwd,strUser,strSource);是我寫錯了,改成
strConnect.Format(_T("Provider=MSDAORA.1;Password=%s;UserID=%s;Data Source=%s;"),strPwd,strUser,strSource);
錯誤依然存在,請大家支招~~~~~~~~~~~~~
#4
你的數據源對不對啊?
還有e.Description()報的是什么啊?這個描述會詳細易懂些
#5
數據源肯定是沒有問題,已經連接測試過了--連接成功
我還沒有用過e.Description()
去試試看
#6
剛才把e.Description()加上,報錯居然說:
ORA-01017:invalid username/password;logon denied
我用的是管理員的用戶system啊,怎么會是無效的呢????
#7
密碼錯了吧.
#8
密碼沒有問題啊,我用Net Configuration Assitant測試,都成功連接了
#9
難道應用程序連接的時候不能使用oracle默認的管理員用戶嗎????
#10
難道應用程序連接的時候不能使用oracle默認的管理員用戶嗎????
---------------------------
不可能吧,雖然一般都不會這么做.
用其他用戶可以連上嗎??
強烈懷疑摟主你搞錯了密碼.
#11
我的密碼應該沒錯,因為我現在就可以用它登陸Enterprise Manager Console。但是即使我用這個系統用戶system,也只能獨立登陸,而無法登陸到Oracle Management Server上去。很奇怪的是我卻能用它在Net Manager中測試連接取得成功,這是為什么呢?
另一個讓我迷惑的地方是,我無法在windows的服務中啟動Agent,這又是為什么呢?
這些問題之間有沒有什么聯系呢?
#12
我新建了一個用戶,但還是不行~~~~~~~~~~~~~~`
#13
另外,Net Configuration Assitant中我也配置過了
#14
有沒有在初始化時調用::CoInitialize(NULL);?
//初始化Connection指針 ,判斷一下創建示例是否成功
m_pConnection.CreateInstance(_uuidof(Connection));
#15
登陸到Oracle Management Server是另外一回事。
Net Manager中測試連接取得成功
-------------
你那些新建的用戶都可以通過測試嗎??
你連接的是同一個instance嗎?有點懷疑。
摟主再仔細檢查檢查吧。
#16
摟主用oracle的provider試看看,迷信一下。
#17
IceKettle(冰湖)和 hjunxu(hjun)的建議,偶都試過了,還是.........不行:(
新建的用戶可以通過測試,oracle的提供的連接方式也試過了.........
#18
瞎問一句,摟主確信聯到的是同一個數據庫嗎??
#19
呵呵,肯定是同一個數據庫啊~~~~~~~`
#20
呵呵,肯定是同一個數據庫啊~~~~~~~`
----------------------
那就有鬼了.
#21
hjunxu(hjun) 能遠程協助幫我調一下程序嗎?
我QQ是:370303486
#22
我上不了qq的。
你把你的tns文件貼出來看看。
#23
tns是什么文件,放在哪里的?:)
#24
ora92/network/admin/tnsnames.ora
#25
tns如下,請hjunxu(hjun)兄幫看看
# TNSNAMES.ORA Network Configuration File: d:\oracle\ora92\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
YWW =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = bupt-19aa454496)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = YWW)
)
)
INST1_HTTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = bupt-19aa454496)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = MODOSE)
(PRESENTATION = http://HRService)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
#26
那么你的配置文件里的配數據是哪個啊?不會錯吧。
樓主試一下連到其他數據源呢?
真見鬼啊。
#27
樓主還沒有找到原因嗎?
#28
樓主核對一下配置文件和tns文件,看數據源對沒有。
#29
這個tns文件,是我同事機器上的,我的程序在他機器上運行的時候,我已經將數據源、用戶、
密碼改成他機器上oracle的了。但是還是出現ORA-01017:invalid username/password;logon denied
#30
配置文件里面關於數據源的配置的值貼出來看看。
#31
不好意思,我是新手,請問包含數據源配置值的配置文件,放在哪里的:)
#32
看你的貼出來的程序,因該是exe目錄下的CRDBS.ini;你不是改過了的嘛。
#33
CRDBS.ini的內容
[General]
數據庫數據源=YWW
數據庫用戶=system
數據庫密碼=sys456
這樣對嗎?
#34
好像沒有問題啊,你在netmanager里面測試的也是這個YWW是吧?
還有你的用戶名和密碼也換成其他的用戶也試了是吧?
那么
GetPrivateProfileString(_T("General"),_T("數據庫數據源"),_T("LUOJIDB"),sz,100,strFileName);
CString strSource(sz);
GetPrivateProfileString(_T("General"),_T("數據庫用戶"),_T("luoji"),sz,100,strFileName);
CString strUser(sz);
GetPrivateProfileString(_T("General"),_T("數據庫密碼"),_T("zjuluoji"),sz,100,strFileName);
CString strPwd(sz)
調試讀到的內容也看了沒有錯嗎?
奇怪的問題啊,不過可以肯定是程序或配置哪里出了問題
#35
讀到的內容沒有錯~~~
我可不可以把我的程序發給你,留一下你的郵箱
你幫我運行一下啊:)
我自己是找不出原因來
#36
iamhjunxu@gmail.com
#37
記得配置文件一起發
#38
兩個問題:
1。Provider=MSDAORA.1;Password=%s;Data Source=%s;UserID=%s;
里面UserID該寫成User ID,(居然沒有發現慚愧)
或者索性放在open的參數里面。connection string 里面就放provider 和datasource。
2。我想你可能改過了,配置文件的目錄應該和exe文件同一個目錄,但你給我的工程是放在工程目錄下面的。所以老是讀到默認值。
我想就是第一個問題造成的,在connection string 語句里面找不到user id,就拿open的參數做用戶名了。
#39
hjunxu(hjun) ,實在是不好意思,我原本是按正確的方式(也就是你在上面提到的方式)來訪問數據庫的----將User ID分開寫,連接不上.后來發給你的程序已經被我改的面目全非了.剛才我又將UserID改成User ID,還是不行......
最后沒辦法了,只好直接在open中放上參數,還是invalid
我現在懷疑是不是數據庫的某項配置出了問題
#40
靠,看看你的配置文件:
其中的等於號竟然使用的是中文全角的!!
還有阿,我也沒有測試過,字段名稱能否使用漢字.
碰到這中配置文件,里面的名稱等 建議還是使用英文字母!
CRDBS.ini的內容
[General]
數據庫數據源=YWW
數據庫用戶=system
數據庫密碼=sys456
這樣對嗎?
#41
xiaofengxu(徐小鋒) 的想法我以前已經試過了,這不是引起錯誤的原因..........
我干脆改成了如下的樣子,但是錯誤依然有
m_pConnection->Open("Provider=MSDAORA.1;Password=sys456;User ID=system;Data Source=YWW;"," "," ",-1);