您将数据库脚本部署到我的客户端PC的最佳方法是什么?我安装了应用程序,并在我的客户端PC上安装了sql management studio。除非我需要更新数据库,否则一切顺利。如何在不让我去他们的电脑运行.sql更新脚本的情况下更新数据库。当我的应用在其他国家/地区使用时,此问题适用。
为了更新代码,我正在使用ClickOnce。 这是一个基于窗口的应用程序。
请帮忙
答案 0 :(得分:2)
我会将SQL文件与您的应用程序一起发送,并具有应用程序启动逻辑,该逻辑始终检查某个位置以查找需要运行的脚本。它可以像检查所有.sql文件的[application path] \ 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
}