我正在使用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脚本?提前谢谢!
答案 0 :(得分:2)
Oracle表单6i不是数据库。它是用于创建表单和报告的软件,它可以访问不同版本的Oracle RDBMS Oracle Forms 6i的第一个版本已发布,可与Oracle 8 RDBMS配合使用,但它可以与更新的版本配合使用。有关详细信息,请访问Wikipedia article on Oracle Forms。
您应该找到生产中的数据库版本。由于您拥有SQL*plus
和ORACLE_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客户端数据提供程序适用于您的设置,只需尝试自行处理程序集本身并提供应用程序部署。我想这可能是值得的。