2011-11-08 40 views
1

我有一個批處理文件,其中包含使用文件夾中的修補程序恢復數據庫的命令。我想創建一個GUI應用程序,它可以執行SQL命令,而不是應用文件夾中的所有修補程序。如何使用C#將修補程序應用於數據庫?

我目前在批處理文件中的以下SQLCMD:

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

文件夾中的補丁編號 - 我需要一種方法來查找數據庫的當前補丁數量和補丁的數量文件夾併爲每個循環使用a僅應用所需的補丁。

如何在指定的數據庫上使用C#執行「應用補丁」SQL命令?

回答

1

您可以通過幾種方式做到這一點:

  • 使用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創建的數據庫。

我工作過的大多數公司都沒有計劃來跟蹤數據庫的版本,而不是偵測工作通過確定table_Q是在版本17中添加的,但是view_P在版本19中添加了並且在版本21中被取出,所以這個數據庫可能是版本19或20。

上週我的一位朋友正在跟我談論DotNetNuke,他聲稱裏面有一些補丁方案可以檢測到放入目錄的補丁,確定它們是否已經被應用並處理那些避難所沒有。我會看看我能否從他那裏得到更好的細節。

相關問題