如何部署数据库

时间:2011-04-05 13:51:10

标签: c# sql-server deployment

您将数据库脚本部署到我的客户端PC的最佳方法是什么?我安装了应用程序,并在我的客户端PC上安装了sql management studio。除非我需要更新数据库,否则一切顺利。如何在不让我去他们的电脑运行.sql更新脚本的情况下更新数据库。当我的应用在其他国家/地区使用时,此问题适用。

为了更新代码,我正在使用ClickOnce。 这是一个基于窗口的应用程序。

请帮忙

1 个答案:

答案 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
}