2014-12-31 3 views
3

Я хотел бы указать порт и sid в строке соединения. После того, как следующий код работаетКак включить sid и порт в строку соединения оракула?

public static string ConnectionString 
{ 
    get 
    { 
     string host = Config.CsHost; 
     string sid = Config.CsSID; 
     string port = Config.CsPort; 
     string user = Config.CsUser; 
     string pass = Config.CsPassword; 
     return String.Format(@"Data Source = {0}:{1}\{2}; Persist Security Info = True; User Id = {3}; Password = {4}; Unicode = True", host, port, sid, user, pass); 
    } 
} 

...

using (OracleConnection connection = new OracleConnection(ConnectionString)) 
{ 
    try 
    { 
     connection.Open(); 

открытые() не отвечает ... Проблема с ИДСОМ я думаю. Что может быть проблемой?

UPDATE: Я должен использовать этот тип соединительной строки. Но я не могу это толковать.

Источник данных = (ОПИСАНИЕ = (ADDRESS_LIST = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = MyHost) (PORT = MyPort))) (CONNECT_DATA = (SERVER = ПОСВЯЩЕННЫЙ) (SERVICE_NAME = MyOracleSID))); User Id = myUsername; Password = myPassword;

Может кто-нибудь помочь мне интерпретировать это?

+2

Http: //www.connectionstrings.com/ – OldProgrammer

ответ

3

мне пришлось заменить SERVICE_NAME на SID, так что:

return String.Format("SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SID={2})));uid={3};pwd={4};", host, port, sid, user, pass); 

сделали Хитрость.

-1

Попробуйте строки соединения:

User Id=[user];Password=[pass];Server=[server];Direct=True;Sid=[sid];Port=[port];Persist Security Info=True 
+0

System.Data.Oracleclient выбрасывает исключение, говоря, что Direct и Sid не являются ключевыми словами ... спасибо в любом случае. –

3

Давайте то, что вы здесь

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID))); 
User Id=myUsername; 
Password=myPassword; 

Это .net строка подключения Эта часть здесь

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID))) 

это то, что потребности клиента Oracle для подключения к SID. Эта часть также может быть настроена в файле TNS Names. В этом случае вы будете иметь что-то вроде

MyOraDbConnection = (DESCRIPTION=(ADDRESS_LIST=... 

Так что ваш .net код будет выглядеть

string connStr = "Data Source=MyOraDbConnection;User Id=myUsername;Password=myPassword;" 

Теперь он выглядит выглядит, как вы хотите, чтобы делать вещи динамически. Как правило, люди принимают кучу значений текстового поля и сцепить их, как это

string dataSource = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + txtDbServer.Text + ... 

другим способ является

string dataSource = string.Format("(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={2})))", 
    txtDbServer.Text, 
    txtPort.Text, 
    txtSid.Text); 

Или, вы можете создать ConnStr объект, который может сделать больше, чем просто конкатенации строк. Это может сохранить соппы строки - в псевдокоде

class ConnStr 
{ 
    string Server {get;set;} 
    string Port {get;set;} 
    string Sid {get;set;} 
    // more properties 

    string GetConnectionString() 
    { 
     // return your compiled string 
    } 

    void Save(string switches) 
    { 
     // Save your string to different places. 
     // For example 
     //  /f myconnfile.txt - will save to application root directory 
     //  /f c:\xxx\myconnfile.txt - will save to specific directory 
     //  /s myconnsetting - will save to settings 
    } 

    void Load(string switches) 
    { 
     // Load your string from sources. 
    } 
} 

Это больше работы, но и больше гибкости тоже

0

Чтобы избежать формата TNS попробовать это:

Data Source = server:port/SID; User ID = user; Password = mypwd 
Смежные вопросы