Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 附加SQL数据库行为_C#_Database - Fatal编程技术网

C# 附加SQL数据库行为

C# 附加SQL数据库行为,c#,database,C#,Database,我正在尝试创建一个setup.exe,用于安装我编写的应用程序 应用程序使用数据库来存储和检索信息 在安装程序中,我让安装用户提供数据库服务器\实例、凭据和要将数据库文件复制到的数据目录 我希望以编程方式永久附加数据库 我使用以下命令以编程方式将数据库附加到我的实例。 con.Open()和con.Close()仅用于测试 System.Data.SqlClient.SqlConnection con; con = new System.Data.SqlClient.SqlConnection(

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

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

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

我希望以编程方式永久附加数据库

我使用以下命令以编程方式将数据库附加到我的实例。 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()时,它会运行并很好地关闭它

  • 当我以这种方式连接数据库时,我在SQLServerManagementStudio中看不到它的连接,就像我在那里手动连接一样。那么,在我退出我的应用程序后,数据库是否仍然连接并工作,以便其他应用程序可以访问它?以这种方式附加是临时的,还是SQL Management Studio没有使用它

  • 这是实现我想要的目标的正确方法吗


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

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

    连接到应用程序中的数据库不会在另一个应用程序(SSMS)中创建连接。另外,如果用户没有SSM怎么办?他们是否可以在不安装多兆字节SQL IDE的情况下运行您的应用程序?@Neil,我的应用程序只是初始化需要访问数据库的客户端可执行文件,即使在我的应用程序关闭后也是如此。当然可以,但是这些客户端可执行文件是否也需要/require/SSMS,或者它们是否“使用数据库”?请记住,运行c#应用程序不需要SSM,它只需要一个指向SQL Server(可能是SQL Express或其他无数SQL Server之一)的连接字符串。@Neil,客户端只需要访问数据库。他们不需要SSM。我只是担心我没有在SSMS中看到它,因为我认为需要在那里看到它,以便我的Sequel服务器允许客户端查看和访问它。因为我认为SMS显示所有连接的数据库。每个应用程序都有自己独立的“连接字符串”,它提供了连接到同一数据库的方法。SSM和其他客户端可执行文件只是这些应用程序的一部分。当然,每个连接字符串实际上可能是相同的,因为它们都指向同一个数据库,只是存储方式不同而已。连接到应用程序中的数据库不会在另一个应用程序(SSMS)中创建连接。另外,如果用户没有SSM怎么办?他们是否可以在不安装多兆字节SQL IDE的情况下运行您的应用程序?@Neil,我的应用程序只是初始化需要访问数据库的客户端可执行文件,即使在我的应用程序关闭后也是如此。当然可以,但是这些客户端可执行文件是否也需要/require/SSMS,或者它们是否“使用数据库”?请记住,运行c#应用程序不需要SSM,它只需要一个指向SQL Server(可能是SQL Express或其他无数SQL Server之一)的连接字符串。@Neil,客户端只需要访问数据库。他们不需要SSM。我只是担心我没有在SSMS中看到它,因为我认为需要在那里看到它,以便我的Sequel服务器允许客户端查看和访问它。因为我认为SMS显示所有连接的数据库。每个应用程序都有自己独立的“连接字符串”,它提供了连接到同一数据库的方法。SSM和其他客户端可执行文件只是这些应用程序的一部分。当然,每个连接字符串实际上可能是相同的东西,因为它们都指向同一个数据库,只是存储方式不同而已。