oracle 报错-3149,VC下用ADO訪問oracle報錯IDispatch error #3149,是什么原因?

訪問數據庫的代碼如下:

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值