Какой самый удобный способ подключения Visual Studio 2005 (C #) к Oracle8? - PullRequest
4 голосов
/ 23 октября 2008

Я ищу лучшие практики для установления соединений между приложениями Oracle 8 и Visual Studio 2005. Целью может быть приложение Windows Forms, написанное на C #, которое обращается к базе данных раз в секунду для мониторинга таблиц в поисках их последней вставленной записи. Я планирую использовать «Настройки приложения» для хранения там строки подключения, но я хотел бы услышать от вас, ребята. Заранее спасибо!

Это очень элементарный черновик:

using System.Data;
using System.Data.OracleClient;

        try
        {
            StringBuilder str = new StringBuilder();
            string ora = Properties.Settings.Default.OracleConnectionString;

            OracleConnection con = new OracleConnection(ora);
            OracleCommand cmd = new OracleCommand();

            cmd.Connection = con;
            cmd.CommandText = "SELECT timestamp FROM jde_out WHERE rownum = 1";
            cmd.CommandType = CommandType.Text;

            con.Open();
            OracleDataReader rdr = cmd.ExecuteReader();
            rdr.Read();

            str.AppendLine(cmd.ExecuteScalar().ToString());
            this.lblJDEtime.Text = str.ToString();
            rdr.Close();
            con.Close();
        }
        catch (OracleException err)
        {
            MessageBox.Show("Exception caught:\n\n" + err.ToString());
        }

Я только что обновил код, необходимый для подключения. Изменен тип исключения на более конкретный OracleException. Добавлена ​​строка подключения через Properties.Settings.

Ответы [ 7 ]

4 голосов
/ 24 октября 2008

ConnectionStrings.com содержит практически все типы строк подключения, которые вам когда-либо понадобятся, включая Oracle .

2 голосов
/ 24 октября 2008

Вот пример из нашей среды:

<add key="ODP.NET.ConnectionString" value="Password=abcdefg;Persist Security Info=True;User ID=abc123;Data Source=blah;"/>

Если имя пользователя и пароль установлены надлежащим образом, а источником данных является запись из Oracle TNSNAMES.ORA, к которой мы подключаемся.

1 голос
/ 24 октября 2008

@ Loscas Поставщик данных AFAIK ODP.NET поддерживается только в Oracle 9i up. MS Oracle провайдер данных работает на 8.1.7 и выше.

@ BQ

Открытие нового соединения с базой данных для еженедельного опроса изменений - дорогостоящая операция.

На самом деле соединение не открыто в con.Open (). Он просто взят из пула открытых соединений. con.Close () возвращает соединение с пулом. Так что в этой обработке соединений нет ничего плохого.

1 голос
/ 23 октября 2008

Основываясь на моем опыте работы с Oracle 10g ....

Я рекомендую использовать поставщик данных Oracle (ODP.Net) и не использовать Microsoft для поставщика данных Oracle, исходя из моего опыта работы с Oracle 10g. Microsoft не обновлялась годами и не поддерживает все в Oracle 10g, поэтому я определенно проверю это для Oracle 8.

Следуя инструкциям Microsoft для строки подключения в файле app.config, вы должны хранить ее как:

<?xml version='1.0' encoding='utf-8'?>
  <configuration>
    <connectionStrings>
      <clear />
      <add name="Name" 
       providerName="System.Data.ProviderName" 
       connectionString="Valid Connection String;" />
    </connectionStrings>
  </configuration>

Я также работал над приложениями с информацией о соединении, сохраненной в настройках приложения, которая отлично работала для нашего приложения.

0 голосов
/ 08 ноября 2008

Что касается строки подключения, так как вы используете System.Data.OracleClient, я бы также рекомендовал отформатировать строку подключения Oracle, чтобы сделать ее независимой от tnsname.ora:

string connectionString = @"
SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP
(HOST=OracleHost)(PORT=OraclePort))
(CONNECT_DATA=(SERVICE_NAME=OracleServiceName)))
;uid=UserID;pwd=Password;";

Вы можете сохранить его в своем файле App.config следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
  <add key="My.Database.Connection" value="SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP
    (HOST=OracleHost)(PORT=OraclePort))
    (CONNECT_DATA=(SERVICE_NAME=OracleServiceName)))
    ;uid=UserID;pwd=Password;" />
  </appSettings>
</configuration>

и затем получить к нему доступ:

connectionString = ConfigurationSettings.AppSettings["My.Database.Connection"];

FYI, вот мое сообщение в блоге на эту тему: Быстрое и грязное соединение с Oracle с использованием ADO.NET

0 голосов
/ 08 ноября 2008

Если вы хотите отслеживать таблицы, вы рассматривали возможность использования триггеров? Примером может быть:

  • Ваше приложение прослушивает TCP порт
  • Вы устанавливаете триггер на Стол Oracle
  • Триггер вызывает некоторые Oracle Java код, который ...
  • ... отправляет простое сообщение в TCP вашего приложения порт
  • Сообщение может быть просто уведомление, и вы можете прочитать из таблицы. Или вы может отправить весь SQL, который повлиял на таблицу как сообщение полезная нагрузка.

Это может работать лучше.

0 голосов
/ 23 октября 2008

Я бы предостерег от построения архитектуры, как вы предлагаете. Открытие нового соединения с базой данных для еженедельного опроса изменений - дорогостоящая операция. Хуже, если вы пытаетесь масштабировать это приложение Windows Form за несколько пользователей.

Вместо этого вы должны изучить встроенные пакеты Oracle, которые могут поддерживать мониторинг такой активности.

РЕДАКТИРОВАТЬ: "WHERE ROWNUM = 1" из вашего примера здесь бесполезно. Oracle не гарантирует заказ результатов каким-либо конкретным способом в соответствии с вашим запросом.

Ваша проблема действительно архитектурная проблема. Опрос таблиц базы данных, как вы предлагаете, НЕ является хорошим способом мониторинга работоспособности приложений. Как минимум, вам лучше иметь компонент на среднем уровне или даже базу данных, периодически записывать в файл журнала, журнал событий Windows, таблицу и т. Д., Которые по сути говорят «Я все еще слушаю» и только опрос ТО ЕДИНСТВЕННЫЙ источник.

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