在C#中安装数据库脚本

时间:2017-07-26 11:22:26

标签: c# sql-server

我们使用实体框架创建了一个C#程序 现在我无法进行设置,因为如果该程序安装在另一个系统上,则很难错过数据库。 该程序自动安装sql server引擎。现在我的问题是数据库的安装。 我想要一个代码来检查安装时是否在引擎上有数据库,如果没有,安装我们的数据库安装的脚本文件。

3 个答案:

答案 0 :(得分:1)

听起来你想要一个Database Initialization Stategy而且我推荐这个符合你的要求:

  

CreateDatabaseIfNotExists :这是默认初始值设定项。顾名思义,如果根据配置不存在,它将创建数据库。但是,如果更改模型类然后使用此初始化程序运行应用程序,则会抛出异常。

我链接的页面还包含如何实施策略的示例:

public class SchoolDBContext: DbContext 
{

    public SchoolDBContext(): base("SchoolDBConnectionString") 
    {
        Database.SetInitializer<SchoolDBContext>(new CreateDatabaseIfNotExists<SchoolDBContext>());

        //Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseIfModelChanges<SchoolDBContext>());
        //Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseAlways<SchoolDBContext>());
        //Database.SetInitializer<SchoolDBContext>(new SchoolDBInitializer());
    }
    public DbSet<Student> Students { get; set; }
    public DbSet<Standard> Standards { get; set; }
}

答案 1 :(得分:0)

如果您正在使用代码优先迁移,则可以生成所需的sql-scripts。我相信你已经有了运行的脚本,所以这不会成为一个问题。

如果初始化程序不能解决问题,您可以查看自定义操作。 然后,您可以运行具有运行安装程序的系统/用户的权限的程序,以检查数据库(或服务器)是否存在。如果没有创建它。

假设您正在创建msi设置,请查看此处。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa368066(v=vs.85).aspx

答案 2 :(得分:0)

我使用sp_attach_db作为附加数据库。 但他告诉我成功附加数据库 但是SQL Server没有附加某些内容 当我运行两次运行时,程序会说数据库可用 要么 (数据库'TellDB'已存在。请选择其他数据库名称。 将数据库上下文更改为“master”。)

try
        {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;";
            con.Open();

            string str = "USE master;" +
           "EXEC sp_attach_db @dbname = N'TellDB' , " +
             " @filename1 = N'" + System.Environment.CurrentDirectory + "\\Data\\TellDB.mdf'," +
             "@filename2 = N'" + System.Environment.CurrentDirectory + "\\Data\\TellDB_log.ldf'";

            SqlCommand cmd = new SqlCommand(str, con);
            cmd.ExecuteNonQuery();
            con.Close();
            MessageBox.Show("Attach the database successfully");

        }

        catch (Exception x)
        {
            if (x.Message.IndexOf("already exists") >= 0)
                MessageBox.Show("The database is available");

            else
                MessageBox.Show(x.Message);
        }