2011-11-08 11 views
1

私は、フォルダからのパッチを使用してデータベースを復元するコマンドを含むバッチファイルを持っています。私はSQLコマンドを実行できるGUIアプリケーションを作成したいが、フォルダ内のすべてのパッチを適用するのではなく、C#を使用してデータベースにパッチを適用するにはどうすればよいですか?

私は現在、バッチファイルで次のsqlcmdを持っている:

sqlcmd -E -S(local) -i "c:\temp\MergedPatchFiles.sql" 

フォルダ内のパッチは番号が付けられている - 私は、データベースの現在のパッチ番号と内のパッチの数を見つけるための方法が必要です必要なパッチだけを適用するには、各ループにaを使用します。

C#を使用して特定のデータベースで 'apply patch' SQLコマンドを実行するにはどうすればよいですか?

答えて

1

を文字列にSQLファイルをロードし、SqlCommand.ExecuteNonQuery方法 を使用します。

  • 使用Process.Start直接sqlcmd(あるいはバッチファイルを実行します直接...)
  • SQLをロードして実行します。ADO.NET
1

ファイルがステートメントをGO持っている場合は、問題に遭遇するかもしれないので、あなたはthis approachを使用することができます。

string scriptDirectory = "c:\\temp\\sqltest\\"; 
string sqlConnectionString = "Integrated Security=SSPI;" + 
      "Persist Security Info=True;Initial Catalog=Northwind;Data Source=(local)"; 
DirectoryInfo di = new DirectoryInfo(scriptDirectory); 
FileInfo[] rgFiles = di.GetFiles("*.sql"); 
foreach (FileInfo fi in rgFiles) 
{ 
    FileInfo fileInfo = new FileInfo(fi.FullName); 
    string script = fileInfo.OpenText().ReadToEnd(); 
    SqlConnection connection = new SqlConnection(sqlConnectionString); 
    Server server = new Server(new ServerConnection(connection)); 
    server.ConnectionContext.ExecuteNonQuery(script); 
} 
1

は、私はデータベースの現在のパッチ番号を検索する方法が必要です...

まず、現在どのリビジョンデータベースをデータベースに保存していますか?私は改訂のトラックに保つための3の異なる方式に遭遇しました:、

  1. DDL監査テーブルを
  2. バージョン番号を持つ1行、
  3. 「何もない」と表 - あなたが持っていますこれはデータベースのどのリビジョンである列、テーブル、ビュー、ストアドプロキシに基づいて推測されます。

監査テーブルは、パッチ番号、それが完了したときの列、またはより複雑なlike this exampleの列のように単純であってもよいです。

バージョンテーブルは、私が働いている会社では、ほとんどの場合、私が手放すことができます。最低でも、2列または3列と1行しか必要としません。そのテーブルの構造は、アプリケーションのバージョン51がバージョン2で作成されたデータベースを開くことができるように決して変更するべきではありません。

私が働いたほとんどの企業は、データベースが探偵作品以外のバージョンバージョン17ではtable_Qが追加されたが、バージョン19ではview_Pが追加され、バージョン21ではview_Pが追加されているため、このデータベースはおそらくバージョン19または20です。

私の友人の一人が先週DotNetNukeについて話していました。ディレクトリに落としたパッチを検出して、それらが既に適用されているかどうかを判断し、されていない。私は彼からより良い詳細を得ることができるかどうかがわかります。

関連する問題