0

我遇到的一件事是将应用程序部署到没有安装 SMO 的机器上。我想执行具有GO语句的脚本,但也想避免在目标机器上安装 SMO 包或解析 SQL 脚本文件(因为我不知道 sql 脚本是否包含函数或 SP)。

我尝试手动将 SMO relevenat dll 复制到可执行文件的 bin 文件夹,但运行应用程序总是需要一些其他 dll。

有什么帮助吗?

4

2 回答 2

3

除了 SMO,sqlcmd实用程序可以理解 GO 语句。您将需要使用System.Diagnostics.Process以将您的脚本作为参数调用它。

我绝不是说这是这样做方法,但它是一个有效的选择。如果目标计算机上不存在该实用程序,您仍然会遇到与以前相同的问题。

您还可以使用安装程序包部署 SMO,而无需在目标计算机上“安装”它:

在设置和部署中嵌入 SMO dll

于 2012-06-13T13:10:55.340 回答
0

我发现以下解决方案经过良好测试

using (SqlConnection cn = new SqlConnection(connectionString))
  {
    try
    {
      cn.Open();
      FileInfo file = new FileInfo(fileName);
      string script = file.OpenText().ReadToEnd();
      string[] splitChar = { "\r\nGO\r\n" };
      var sqlLines = script.Split(splitChar, StringSplitOptions.RemoveEmptyEntries);
      int res = 0;
      SqlCommand cmd = null;
      foreach (var query in sqlLines)
      {
          cmd = new SqlCommand(query, cn)
          {
              CommandTimeout = 5400
          };
          res = cmd.ExecuteNonQuery();
      }
      cn.Close();
    }
    catch (Exception ex)
    {
      msg = ex.Message;
    }
    finally
    {
      cn.Close();
    }
  }
于 2018-06-07T08:59:41.453 回答