使用 C# 在 Oracle 数据库上执行 SQL 文件

Execute SQL file on Oracle database using C#

我在 script.sql 文件中编写了 SQL 脚本来创建程序。此 script.sql 文件位于应用程序路径中。

现在我已经用 C# 编写了一个创建数据库连接的工具。我想通过此连接 运行 带有代码的脚本文件。这可能吗?

private OracleConnection oraCon = new OracleConnection();

...

// ORACLE VERBINDUNG
try
{
    if (oraCon.State != ConnectionState.Open)
    {
        oraCon.ConnectionString = "Data Source=" + tboServername.Text + "/" + 
        tboDatenbank.Text + ";User Id=" + tboLogin.Text + ";Password=" + tboPasswort.Text;

        oraCon.Open();
    }
}
catch (Exception ex)
{
    Errorlog(ex.ToString());
}

我可以将 script.sql 直接传输到 OraCon 连接吗?或者也许还有其他方法?

您可以,但可能不直接 - 请记住,不同语句之间的分隔符(例如 ; 或 /)在 oraclecommand 中是不允许的,因此如果您的脚本有多个语句由某些东西分隔,那么脚本应该拆分那件事和 运行 中的每个语句分开。如果您的脚本创建存储过程并因此在其中添加分号,因为它们是存储过程的一部分,您可以将整个脚本包装在 ' 中并立即执行它

基本上如果你有一些像

这样的脚本文件
CREATE PROCEDURE BLAH .. semicolons blah..
/
CREATE PROCEDURE BLAH2 .. semicolons blah..

您正在寻找这样的东西:

var statements = File.ReadAllText(path).Split("\n/");

foreach(var statement in statements)
  new OracleCommand($"EXECUTE IMMEDIATE '{statement}'", connection).ExecuteNonQuery();

您也许还可以选择让 sqlplus 命令行工具运行您的脚本