如何在C#中的单个文件中执行多个SQL脚本?

时间:2018-04-04 05:06:48

标签: c# sql-server

我试图在C#的单个文件中执行多个SQL脚本。在脚本之间我有GO个语句。该脚本就像一个增量脚本,并且日常脚本会增加。我尝试使用ExecuteReader()ExecuteScalar()ExecuteNonQuery(),但它抛出异常,说GO语法不正确。

然后我用GO拆分脚本并在一个循环中,我试图在那里执行脚本将Declare @xyz DataType抛出异常的地方。

请建议我如何从C#执行此类脚本。

foreach (var sqlBatch in ScriptDetails.Split(new[] { "GO", "Go", "go", "gO" }, StringSplitOptions.RemoveEmptyEntries))
{
    try
    {
        string[] prefixes = { "--", "/*" };
        bool resultchk = prefixes.Any(prefix => sqlBatch.StartsWith(prefix));
        if (!resultchk)
        {
            connection.Open();
            command.CommandText = sqlBatch;
            command.ExecuteNonQuery();//ExecuteReader(); ExecuteScalar()
            connection.Close();
            Result.Add(new SQLResult { Final_message = "Success" });
        }
    }
    catch (SqlException ex)
    {
        Result.Add(new SQLResult { Final_message = ex.Message.ToString(), Line_No = ex.LineNumber });
        connection.Close();
    }
}

1 个答案:

答案 0 :(得分:1)

我会尝试只打开一次连接来运行脚本的所有部分。

的伪代码:

use (var connection ...)
{
  connection.Open();
  foreach (var sqlBatch in ...)
  {
    use (var command = new Command(..., connection))
    {
      command.CommandText = sqlBatch;
      ...
      command.ExecuteNonQuery();
    }
  }
}