如何将sid和port包含在oracle连接字符串中?

Mit*_*áti 5 .net oracle connection-string

我想在连接字符串中指定端口和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);
    }
}
Run Code Online (Sandbox Code Playgroud)

...

using (OracleConnection connection = new OracleConnection(ConnectionString))
{
    try
    {
        connection.Open();
Run Code Online (Sandbox Code Playgroud)

Open()没有响应......问题在于我认为的sid.可能是什么问题?

更新:我应该使用这种连接字符串.但我不能很好地解释它.

数据源=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = MyHost)(PORT = MyPort)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = MyOracleSID))); 用户ID = myUsername;密码= myPassword;

有人能帮我解释一下吗?

Mik*_*Twc 6

要避免 TNS 格式,请尝试以下操作:

Data Source = server:port/SID; User ID = user; Password = mypwd
Run Code Online (Sandbox Code Playgroud)


T.S*_*.S. 5

让我们拿走这里的一切

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

这是.net连接字符串 这部分在这里

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID))) 
Run Code Online (Sandbox Code Playgroud)

是 oracle 客户端需要连接到 SID 的内容。这部分也可以在TNS Names文件中配置。在这种情况下,您将有类似的东西

MyOraDbConnection = (DESCRIPTION=(ADDRESS_LIST=...
Run Code Online (Sandbox Code Playgroud)

所以你的.net代码看起来像

string connStr = "Data Source=MyOraDbConnection;User Id=myUsername;Password=myPassword;"
Run Code Online (Sandbox Code Playgroud)

2

现在,看起来您想要动态地做事。通常,人们采用一堆文本框值并将它们连接成这样

string dataSource = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + txtDbServer.Text + ...
Run Code Online (Sandbox Code Playgroud)

另一种方式是

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);
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建 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. 
    }
}
Run Code Online (Sandbox Code Playgroud)

这是更多的工作,但也更灵活


Mit*_*áti 5

我不得不将 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);
Run Code Online (Sandbox Code Playgroud)

成功了。