繁体   English   中英

c#中的oracle连接问题

[英]problem with oracle connection in c#

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

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

你可能想尝试类似的东西:

连接字符串:

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

现在,在您的PC上查看tnsname.ora文件。 它将在您本地Oracle Client安装的某个位置。 你正在寻找类似的东西:

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是主数据库的名称,而不是其下的架构之一(具有所有表和过程的实体等)。

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(),但未打开连接-因此它也失败了,但现在不在try catch范围内。 您需要检查

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}}};用户ID = myUsername;密码= MYPASSWORD;

更多这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM