C# 中的 Oracle 连接问题

本文关键字:问题 连接 Oracle 中的 | 更新日期: 2023-09-27 17:56:34

我有一台Windows XP机器,用于使用VS 2008创建.Net应用程序。

我想连接到运行 Oracle 10g 数据库的远程网络服务器(使用 Windows xp)。

我正在使用下面的代码(带有第一个连接字符串)直接连接到在同一台计算机上运行的 10g 版本,没有问题,但是当我尝试连接到网络机器时,它实际上使我的应用程序崩溃。

我已经尝试了连接字符串的几种变体,因为我觉得我一定在某处犯了语法错误。

我担心的是我在应用程序中有双重 try/catch 语句,我不明白为什么它根本不拒绝连接并报告错误。

我想真正的问题是"连接字符串的正确语法是什么"......或者不管我到底做错了什么。

任何帮助或建议将不胜感激。提前谢谢你。

//Class Variables
string CONNSTR = "Server=192.168.0.1:1521;User ID=zahid;Password=abc123;";

public Oracle()
{
  InitializeComponent();
}
//Methods
private void TestMyOracleConnection()
{
  OracleConnection Conn = new OracleConnection(CONNSTR);
  try
  {
    Conn.Open();
    MessageBox.Show("Oracle Connection Established", "Success");
  }
  catch (OracleException ex)
  {
    MessageBox.Show(ex.Message, "Oracle Connection Failed!");
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message, "Oracle Connection Failed!");
  }
  finally
  {
    Conn.Close();
    MessageBox.Show("Oracle Connection Closed", "Success");
  }
}
private void buttonTestConnection_Click(object sender, EventArgs e)
{
  TestMyOracleConnection();
}

C# 中的 Oracle 连接问题

您可能想尝试如下操作:

连接字符串:

Data Source=DBNAME;User ID=zahid;Password= abc123;Persist Security Info=True;Unicode=True;

现在查看PC上的tnsname.ora文件。它将位于本地 Oracle 客户端安装下的某个位置。您正在寻找类似以下内容的内容:

DBNAME =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleServerName)(PORT = 1510))
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleServerName)(PORT = 1514))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DBNAME)
    )
  )

您希望用自己的DBNAMEOracleServerName替换。不要忘记,DBNAME是主数据库的名称,而不是其下的一个架构(包含所有表和过程等的实体)。

假设您使用的是 ODP.Net,则可以尝试如下连接字符串(取自web.config):

<add name="OdpConnection" connectionString="Data Source=xe;User Id=some_user;Password=some_password; Promotable Transaction=local"
     providerName="Oracle.DataAccess.Client" />

可以使用如下所示的内容从代码中的 web.config 读取此连接字符串:

string connectionString = ConfigurationManager.ConnectionStrings["OdpConnection"].ConnectionString;
最好

避免将连接字符串直接放在代码中,因为更改它们需要重新编译。通过将它们放在配置文件中,例如 web.configapp.config ,您可以更改它们而无需重新编译库或 exe。

try
  {
    Conn.Open();
    MessageBox.Show("Oracle Connection Established", "Success");
  }
  catch (OracleException ex)
  {
    MessageBox.Show(ex.Message, "Oracle Connection Failed!");
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message, "Oracle Connection Failed!");
  }
  finally
  {
    Conn.Close();
    MessageBox.Show("Oracle Connection Closed", "Success");
  }

你在这里有一个潜在的问题:如果连接。Open() 失败(所以连接没有打开),最后你调用 conn.close(),但连接没有打开 - 所以它也失败了,但它现在在 try catch 之外。您需要检查

if (Conn!=null && Conn.IsOpen())
  Conn.Close();

预言机的连接字符串:数据源=TORCL;用户 ID = 我的用户名;密码=我的密码;

Data Source=(DESCRIPTION=(ADDRESS_LIST=(

ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));用户 ID = 我的用户名;密码=我的密码;

更多在这里