我正在尝试创建一个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");
仅需确认的几个问题:
当我尝试使用con.Open()时,我得到一个已经打开的错误,那么以这种方式附加数据库会自动打开它吗?当我删除con.open()时,它将运行并关闭它。
当我以这种方式附加数据库时,在SQL Server Management Studio中看不到它附加,就像我要在此处手动附加它一样。那么,退出应用程序后数据库是否仍可以连接并可以正常工作,以便其他应用程序可以访问它?这种方式是临时的,还是只是SQL Management Studio没接过?
这是实现我想要的东西的正确方法吗?
答案 0 :(得分:2)
每个应用程序都有其自己独立的“连接字符串”,提供了一种连接到同一数据库的方法。 SSMS和其他客户端可执行文件只是这些应用程序中的更多。当然,每个连接字符串实际上都可能是相同的东西,因为它们都指向同一数据库,只是存储方式不同。