【问题标题】:Execute SQL file on Oracle database using C#使用 C# 在 Oracle 数据库上执行 SQL 文件
【发布时间】:2021-12-28 03:59:34
【问题描述】:

我在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 连接吗?或者也许还有其他方法?

【问题讨论】:

  • 请注意,如果创建该工具的目的是隐藏数据库的密码,那么 a) 您的 exe 可以被反编译以获取密码,并且 b) 甚至没有必要这样做,因为恶意用户可以将任何他们想要的内容写入 sql 文件 - 请谨慎使用

标签: c# oracle file sql-scripts


【解决方案1】:

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

基本上,如果您有一些脚本文件,例如

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 命令行工具运行您的脚本

【讨论】:

  • 感谢您的帮助,这正是我想要的!
猜你喜欢
  • 2019-11-09
  • 2018-11-22
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多