0

私が問題を抱えていることの 1 つは、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 に答える