附加SQL数据库行为

时间:2019-03-06 13:46:22

标签: c# database

我正在尝试创建一个setup.exe来安装我编写的应用程序。

应用程序使用数据库来存储和检索信息。

在安装程序中,我让安装用户提供数据库服务器\实例,凭据和DATA目录,以将数据库文件复制到其中。

我想以编程方式永久连接数据库。

我使用以下内容以编程方式将数据库附加到我的实例。 con.Open()和con.Close()仅用于测试。

System.Data.SqlClient.SqlConnection con;
con = new System.Data.SqlClient.SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;Integrated Security=true;Connect Timeout=30;User Instance=True";

ServerConnection serverconn = new ServerConnection(con);        
Server s = new Server(serverconn);
s.DetachDatabase("DBX2", true, true);
s.AttachDatabase("DBX2", new System.Collections.Specialized.StringCollection { @"C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\DBX2.mdf", @"C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\DBX2_log.ldf" }, AttachOptions.None);

con.Open();
MessageBox.Show("Connection Opened");
con.Close();
MessageBox.Show("Connection Closed");

仅需确认的几个问题:

  1. 当我尝试使用con.Open()时,我得到一个已经打开的错误,那么以这种方式附加数据库会自动打开它吗?当我删除con.open()时,它将运行并关闭它。

  2. 当我以这种方式附加数据库时,在SQL Server Management Studio中看不到它附加,就像我要在此处手动附加它一样。那么,退出应用程序后数据库是否仍可以连接并可以正常工作,以便其他应用程序可以访问它?这种方式是临时的,还是只是SQL Management Studio没接过?

  3. 这是实现我想要的东西的正确方法吗?

1 个答案:

答案 0 :(得分:2)

每个应用程序都有其自己独立的“连接字符串”,提供了一种连接到同一数据库的方法。 SSMS和其他客户端可执行文件只是这些应用程序中的更多。当然,每个连接字符串实际上都可能是相同的东西,因为它们都指向同一数据库,只是存储方式不同。