使用C#访问Oracle 6i和9i / 10g数据库

时间:2010-05-10 08:38:37

标签: c# sql oracle scripting

我正在使用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;
          }
      }  

经过一些研究后,我发现您可以使用System.Data.OracleClient命名空间clicky连接到Oracle数据库。但是,如链接中所述,Microsoft正在停止对此的支持,因此它不是一个理想的解决方案。我还想知道Oracle提供了自己的类来连接Oracle数据库clicky。但是,这似乎只支持连接到Oracle 9或更新的数据库(clicky),所以它不是可行的解决方案,因为我还需要连接到Oracle 6i数据库。

我可以通过在C#脚本中调用bat脚本来实现这一点,但为了简单起见,我更倾向于使用单个构建文件。理想情况下,我想运行一系列命令,例如以下.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的环境变量,然后以静默模式(-s)运行sqlplus,然后运行一系列sql set命令(set x),实际的select语句和exit命令。我可以在不调用bat脚本的情况下在c#脚本中实现这一点,还是我被迫调用bat脚本?提前谢谢!

3 个答案:

答案 0 :(得分:2)

Oracle表单6i不是数据库。它是用于创建表单和报告的软件,它可以访问不同版本的Oracle RDBMS Oracle Forms 6i的第一个版本已发布,可与Oracle 8 RDBMS配合使用,但它可以与更新的版本配合使用。有关详细信息,请访问Wikipedia article on Oracle Forms

您应该找到生产中的数据库版本。由于您拥有SQL*plusORACLE_SID,因此只需连接到您的所有数据库,您将看到的第一件事就是服务器版本。

你可能没有比9i更早的RDBMS,因为Oracle在2006年停止支持v8。对v9的支持将在两个月后结束 - 即2010年7月。在这里你可以找到所有Oracle产品的Oracle Lifetime Support Policy文档。对于RDBMS支持策略,请阅读Lifetime Support Policy: Oracle Technology Products

答案 1 :(得分:1)

你可能没有问题。

您评论说“这似乎只支持连接到Oracle 9或更新的数据库,所以它不可行,因为我还需要连接到Oracle 6i数据库”。

“6i”指定是指表格和报告。虽然有一个Oracle v6数据库版本,但它已经超过15年了,你不太可能连接到运行该版本的RDBMS软件的数据库。

答案 2 :(得分:0)

事实上,微软正在停止使用System.Data.OracleClient,因为它在某些使用条件下是错误的,并且最好与Oracle .NET数据提供程序一起使用,因为它是有效的,并且仍然是,最好的反对Oracle。

作为连接到6i数据库的替代方法,取决于它是否在您的特定情况下可行,ODBC DSN可能会很有趣,不是吗?

否则,如果Microsoft Oracle客户端数据提供程序适用于您的设置,只需尝试自行处理程序集本身并提供应用程序部署。我想这可能是值得的。