2010-04-22 127 views
0

此刻我正在嘗試建立到本地服務器的連接。 通過TOAD進行連接可以正常工作。當我嘗試使用.NET進行連接時,我得到了ora-12154。 這讓我爲難,因爲我使用的是從我的TNSNAMES.ORA文件中的ConnectionString:.NET連接到oracle連接字符串的問題

XE = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = myPC)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = XE) 
    ) 
) 

如下:

private string connectionString = "Data Source=(DESCRIPTION =" 
    +" (ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = myPC)(PORT = 1521)))" 
    +" (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = XE));" 
    +"User Id=sys;Password=zsxyzabc;"; 

任何想法?

回答

1

您正在連接爲SYS。爲此,你需要包括SYSDBA權限:

+"User Id=sys;Password=zsxyzabc;DBA Privilege=SYSDBA;"; 

這是不好的做法,使用SYS帳號定期應用工作,甚至經常DBA的工作。但有時候這是必要的,當有必要時我們必須連接as sysdba

編輯

這是一個微妙的:你在字符串末尾有一個失蹤支架!

private string connectionString = "Data Source=(DESCRIPTION =" 
    +" (ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = myPC)(PORT = 1521)))" 
    +" (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = XE)));" 
                   ^

使用支架匹配(我使用TextPad)的IDE在這些情況下是一個福音。

+0

我試着以'普通'用戶身份登錄,結果也是一樣。 – Oxymoron 2010-04-22 10:45:39

+0

哦,親愛的...... VS不會在字符串中顯示丟失的括號,所以我完全忽略了它。 謝謝你鋒利;) – Oxymoron 2010-04-22 11:19:08

0

你可能只是能夠與Oracle的.NET提供程序做到這一點。該提供程序在連接字符串中確實支持「DBA Privilege = SYSDBA」設置。

你爲什麼用SYS用戶登錄?這很危險,你可以創建一個新用戶並與之連接。你可能想要給你想要的任何特權。試試這個:

string connString = "User Id=sys; Password=zsxyzabc; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myPC)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SID=xe)))";