Доступ к базам данных Oracle 6i и 9i / 10g с использованием C # - PullRequest
0 голосов
/ 10 мая 2010

Я делаю два файла сборки, используя NAnt. Первый направлен на автоматическую компиляцию форм и отчетов Oracle 6i, а второй - на составление форм и отчетов Oracle 9i / 10g. В задачу NAnt входит скрипт C #, который запрашивает у разработчика учетные данные базы данных (имя пользователя, пароль, база данных) для составления форм и отчетов. Затем я хочу запустить эти учетные данные для соответствующей базы данных, чтобы убедиться, что введенные учетные данные верны, и, если это не так, предложить пользователю повторно ввести свои учетные данные. Мой скрипт в настоящее время выглядит следующим образом:

class GetInput
      {  
        public static void ScriptMain(Project project) 
        { 
          Console.Clear();
          Console.WriteLine("===================================================================");
          Console.WriteLine("Welcome to the Compile and Deploy Oracle Forms and Reports Facility");
          Console.WriteLine("===================================================================");
          Console.WriteLine();

          Console.WriteLine("Please enter the acronym of the project to work on from the following list:");
          Console.WriteLine();
          Console.WriteLine("--------");
          Console.WriteLine("- BCS");
          Console.WriteLine("- COPEN");
          Console.WriteLine("- FCDD");
          Console.WriteLine("--------");
          Console.WriteLine();
          Console.Write("Selection: ");
          project.Properties["project.type"] = Console.ReadLine();              
          Console.WriteLine();

          Console.Write("Please enter username: ");
          string username = Console.ReadLine();
          project.Properties["username"] = username;
          string password = ReturnPassword();
          project.Properties["password"] = password
          Console.WriteLine();
          Console.Write("Please enter database: ");
          string database = Console.ReadLine();
          project.Properties["database"] = database
          Console.WriteLine();

          //Call method to verify user credentials

          Console.WriteLine();
          Console.WriteLine("Compiling files...";
        }

        public static string ReturnPassword()
        {
            Console.Write("Please enter password: ");
            string password = "";
            ConsoleKeyInfo nextKey = Console.ReadKey(true);

            while (nextKey.Key != ConsoleKey.Enter)
            {
                if (nextKey.Key == ConsoleKey.Backspace)
                {
                    if (password.Length > 0) 
                    { 
                        password = password.Substring(0, password.Length - 1); 
                        Console.Write(nextKey.KeyChar); 
                        Console.Write(" "); 
                        Console.Write(nextKey.KeyChar); 
                    } 
                } 
                else 
                { 
                    password += nextKey.KeyChar; 
                    Console.Write("*"); 
                } 
                nextKey = Console.ReadKey(true); 
            }   
                return password;
          }
      }  

Проведя небольшое исследование, я обнаружил, что вы можете подключиться к базам данных Oracle, используя пространство имен System.Data.OracleClient clicky . Однако, как упоминалось в ссылке, Microsoft прекращает поддержку этого, поэтому это нежелательное решение. Я также считаю, что Oracle предоставляет свои собственные классы для подключения к базам данных Oracle clicky . Однако кажется, что это только поддерживает подключение к Oracle 9 или более новым базам данных ( clicky ), поэтому это неосуществимое решение, поскольку мне также необходимо подключиться к базам данных Oracle 6i.

Я мог бы добиться этого, вызвав скрипт bat из скрипта C #, но для простоты я бы предпочел иметь один файл сборки. В идеале я хотел бы выполнить ряд команд, таких как содержится в следующем сценарии .bat:

rem -- Set Database SID --
set ORACLE_SID=%DBSID%

sqlplus -s %nameofuser%/%password%@%dbsid%
set cmdsep on
set cmdsep '"'; --"
set term on
set echo off
set heading off
select '========================================' || CHR(10) || 'Have checked and found both Password and ' || chr(10) || 'Database Identifier are valid, continuing ...' || CHR(10) || '========================================' from dual;

выход;

Это требует, чтобы я установил переменную среды ORACLE_SID, а затем запустил sqlplus в режиме без вывода сообщений (-s), после чего последовал ряд команд sql set (set x), собственно оператор select и команда exit. Могу ли я добиться этого в сценарии c # без вызова сценария bat, или я вынужден вызывать сценарий bat? Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 10 мая 2010

Oracle формы 6i не является базой данных. Это программное обеспечение для создания форм и отчетов, и оно может обращаться к различным версиям СУБД Oracle.
Первая версия Oracle форм 6i была выпущена для работы с СУБД Oracle 8, но она могла работать с более новыми версиями. Более подробную информацию об этом вы можете найти в статье Википедии о Oracle Forms .

Вы должны выяснить, какие версии базы данных у вас в работе. Поскольку у вас есть SQL*plus и ORACLE_SID, просто подключитесь ко всем вашим базам данных, и первое, что вы увидите, это версия сервера.

Возможно, у вас RDBMS не старше 9i, потому что Oracle прекратила поддерживать v8 в 2006 году. Поддержка v9 прекратится через два месяца - в июле 2010 года. Здесь вы можете найти Политика поддержки Oracle Lifetime * все продукты Oracle. Информацию о политике поддержки СУБД см. Политика поддержки на весь срок службы: Продукты Oracle Technology

1 голос
/ 10 мая 2010

У вас может не быть проблем.

Вы комментируете, что «кажется, что это поддерживает только подключение к Oracle 9 или более новым базам данных, поэтому это нереальное решение, так как мне также нужно подключаться к базам данных Oracle 6i».

Обозначение «6i» относится к формам и отчетам. Хотя был выпуск базы данных Oracle v6, это было более 15 лет назад, и очень маловероятно, что вы будете подключаться к базе данных, на которой работает эта версия программного обеспечения СУБД.

0 голосов
/ 10 мая 2010

Фактом является то, что Microsoft прекращает выпуск System.Data.OracleClient, так как он работал с ошибками при некоторых условиях использования, и всегда было предпочтительнее использовать Oracle .NET Data Provider, так как он работал, и до сих пор, лучше против Oracle.

В качестве альтернативы для подключения к базе данных 6i, в зависимости от того, возможно ли это в вашей конкретной ситуации, ODBC DSN может быть интересным, не так ли?

В противном случае, если поставщик данных клиента Microsoft Oracle работает хорошо для вашей установки, просто попробуйте взять руку на саму сборку и предоставить ее для развертывания вашего приложения. Я думаю, это может быть достойно.

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