嗨什麼是部署數據庫腳本到我的客戶端PC的最佳方式?我已經安裝了應用程序,並在客戶端電腦上安裝了SQL管理工作室。除了當我需要更新數據庫時,一切都很順利。我如何更新數據庫,而不必讓我去他們的電腦上運行.sql更新腳本。這個問題適用於我的應用程序在其他國家使用。如何部署數據庫
對於更新代碼是好的,因爲我使用ClickOnce。 這是一個基於窗口的應用程序。
請幫
嗨什麼是部署數據庫腳本到我的客戶端PC的最佳方式?我已經安裝了應用程序,並在客戶端電腦上安裝了SQL管理工作室。除了當我需要更新數據庫時,一切都很順利。我如何更新數據庫,而不必讓我去他們的電腦上運行.sql更新腳本。這個問題適用於我的應用程序在其他國家使用。如何部署數據庫
對於更新代碼是好的,因爲我使用ClickOnce。 這是一個基於窗口的應用程序。
請幫
我會附帶應用程序中的SQL文件,並有一個總是檢查其他地方進行了需要運行的腳本程序啓動邏輯。它可以像檢查所有.sql文件的[應用程序路徑] \ MigrationScripts文件夾一樣簡單。如果找到文件,請閱讀內容並針對數據庫執行。
一旦檢查(和潛在的數據庫更新)完成,繼續加載應用程序。
示例代碼(未經測試),和一個非常基本的實現:
public class Migration
{
private string _migrationPath = @"C:\temp\MigrationSteps"; //change
private string[] _sqlFiles = null;
public Migration()
{
Initialize();
}
public Migration(string path)
{
_migrationPath = path;
Initialize();
}
private void Initialize()
{
_sqlFiles = Directory.GetFiles(_migrationPath, "*.sql");
}
public bool Run()
{
bool success = true;
foreach (string sqlFile in _sqlFiles)
{
ExecuteRun(File.ReadAllText(sqlFile));
}
return success; //Do something with this value
}
public bool CleanUp()
{
//Put some logic here to "clean up" files that have already been run.
throw new NotImplementedException();
}
private bool ExecuteRun(string sqlText)
{
//Call your data access library and execute the sqlText
throw new NotImplementedException();
}
}
用法:
Migration migration = new Migration();
if (migration.Run())
{
migration.CleanUp();
}
else
{
//Do something
}
@BrandonZeider:這聽起來不錯。我可以在我的項目中創建一個新文件夾調用MigrationScripts,並將這些更新數據庫腳本放在該文件夾中。但是,我應該在哪裏編寫檢查腳本來檢查MigrationScript文件夾中的所有.sql文件?你能提供一些代碼示例嗎? – VeecoTech 2011-04-05 14:18:06
你會把邏輯放在你的Main入口點。你使用閃屏嗎?我將用一些代碼更新我的答案以檢查sql文件。 – BrandonZeider 2011-04-05 14:27:59
@BrandonZeider:這聽起來不錯。讓我試試看,我會回到你身邊。我想我需要爲此設置一個啓動畫面。一個問題 - 當我調用ExecuteRun()來運行sql腳本時,是否需要輸入Sql用戶名和密碼來運行這些腳本? – VeecoTech 2011-04-05 14:46:47
我想你應該闡明情況的一些情況。這是客戶端服務器應用程序嗎?你是否分享開發環境? – Peter 2011-04-05 13:59:51
opss ..我忘了提及它是一個基於窗口的應用程序。數據庫安裝在客戶端PC上。 – VeecoTech 2011-04-05 14:05:23
因此,每個使用該應用程序的客戶端都需要安裝SQL Server實例?你知道你可以集中你的SQL Server,所以每個客戶端連接到相同的? – Peter 2011-04-05 14:07:33