проблема с соединением оракула в c # - PullRequest
1 голос
/ 17 мая 2011

У меня есть машина с Windows XP, используемая для создания приложений .Net с VS 2008.

Я хочу подключиться к удаленному сетевому серверу (используя Windows XP), на котором запущена база данных Oracle 10g.

Я использую приведенный ниже код (с первой строкой подключения) для прямого подключения к версии 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 ]

1 голос
/ 17 мая 2011

Возможно, вы захотите попробовать что-то вроде:

строка подключения:

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

Теперь посмотрите в файле 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)
    )
  )

Вы хотите заменить DBNAME и OracleServerName на свои собственные. Не забывайте, что DBNAME - это имя основной базы данных, а не одна из схем (сущность со всеми таблицами и процедурами и т. Д.) Под ней.

1 голос
/ 17 мая 2011
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();

Строка подключения для оракула: Источник данных = TORCL; Идентификатор пользователя = myUsername; Пароль = myPassword;

Источник данных = (ОПИСАНИЕ = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP) (HOST = MyHost) (PORT = MyPort))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MyOracleSID))); Идентификатор пользователя = myUsername; Пароль = myPassword;

Подробнее здесь

1 голос
/ 17 мая 2011

Если вы используете 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.config или app.config, вы можете изменить их без необходимости перекомпиляции вашей библиотеки или exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...