C# 使用本地数据库发布WPF应用程序

C# 使用本地数据库发布WPF应用程序,c#,wpf,database,C#,Wpf,Database,好吧,我完全迷路了。这是我为windows编写的第一个带有本地数据库的真实应用程序。 我在VS2012中使用本地数据库编写了一个WPF应用程序,其中所有CRUD都作为存储过程编写。 当我在VS中运行应用程序时,它正在工作。但是当我构建应用程序并安装它(在任何机器上)时,数据库无法访问。我感觉连接字符串导致了这个问题 首先,我使用了这个连接字符串: SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;Attach

好吧,我完全迷路了。这是我为windows编写的第一个带有本地数据库的真实应用程序。 我在VS2012中使用本地数据库编写了一个WPF应用程序,其中所有CRUD都作为存储过程编写。 当我在VS中运行应用程序时,它正在工作。但是当我构建应用程序并安装它(在任何机器上)时,数据库无法访问。我感觉连接字符串导致了这个问题

首先,我使用了这个连接字符串:

SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename='D:\LH\Personalitytest win\DB.mdf';Integrated Security=True;Database=DB")
但是当我得到“Error:26–Error locking Server/Instance Specified”时,我猜测连接的数据源是不正确的(尽管AttachDbFilename肯定是不正确的)。因此,我将连接字符串更改为:

SqlConnection conn = new SqlConnection(@"Server=(localdb)\v11.0;AttachDbFilename=" + AppDomain.CurrentDomain.BaseDirectory + "DB.mdf;Database=DB;Trusted_Connection=Yes;");
我得到一个错误,基本上是说找不到DB.mdf文件

因此,我确保将.mdf和.ldf文件复制到安装目录/数据库。 但在安装之后,这两个文件都是只读的(即使在我开发的过程中这些文件具有读/写权限)。我已尝试在应用程序首次启动时通过以下方式更改文件权限(两个文件):

string path = AppDomain.CurrentDomain.BaseDirectory + @"Database\DB.mdf";
FileInfo file = new FileInfo(path);
file.IsReadOnly = false;

但这两种方法都不起作用

我的问题基本上是,在最终版本中应该如何实现数据库?

  • 数据库应位于windows用户目录中

  • 另一种方法是在您的计算机上安装SQLServerExpress。并相应地配置连接字符串

File.SetAttributes(path, FileAttributes.Normal);
FileAttributes attributes = File.GetAttributes(path);
attributes = attributes & ~FileAttributes.ReadOnly;
File.SetAttributes(path, attributes);