c#中oracle连接的问题

时间:2011-05-17 12:16:51

标签: c# .net oracle

我有一台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();
}

3 个答案:

答案 0 :(得分:1)

假设您使用的是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。

答案 1 :(得分:1)

您可能想要尝试以下内容:

连接字符串:

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。不要忘记,{{1}}是主数据库的名称,而不是其中的一个模式(具有所有表和过程的实体等)。

答案 2 :(得分:1)

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

你有问题:如果conn.Open()失败(所以没有打开连接),你最后调用conn.close(),但是没有打开连接 - 所以它也失败了,但它现在在外面试着抓。你需要检查

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

oracle的连接字符串: 数据源= TORCL;用户ID = myUsername;密码= myPassword;

数据源=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = MyHost)(PORT = MyPort)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = MyOracleSID)));用户标识=名为myUsername;密码= MYPASSWORD;

More here