无法将数据插入 WPF 中的本地数据库

本文关键字:数据库 WPF 数据 插入 | 更新日期: 2023-09-27 18:33:26

在一个项目中,我有一个本地数据库(我正在使用数据网格来查看数据(,但问题是当我使用插入查询插入数据库时,插入不是持久的,即当我重新运行应用程序时,数据库不会更改,并且更改不会反映在数据库视图中(Visual Studio 中的视图表数据(。

插入查询为:

string dbCon = new     System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "''MyDatabase.sdf";
        SqlCeConnection dbconnection = new SqlCeConnection("datasource=" + dbCon);
        dbconnection.Open();
        String Insert = "insert into MainTable(LineID,Date,Connection_Type)  Values('5','5/8/2012','commercial')";
SqlCeCommand cmd = new SqlCeCommand(Insert, dbconnection);
        //// Execute the command
        cmd.ExecuteNonQuery();
        dbconnection.Close();

现在,当此代码运行时,数据网格将更新,但更改不是永久性的。我做错了什么?我正在使用Visual Studio 2010 Ultimate和Windows 7

无法将数据插入 WPF 中的本地数据库

您的应用程序在哪个文件夹中运行?如果它位于"程序文件"树中,则可能没有对 sdf 文件的写入权限(尤其是在 Windows 7 上,除非您已关闭 UAC 或在执行之前提升应用(。

即使这不是您的短期问题,我也建议您为 sdf 文件找到不同的位置,例如 AppData 位置之一。期望能够写入安装位置并不是一个保证,这取决于你的应用的部署方式和位置。

  1. Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "''MyDatabase.sdf"是应用程序文件夹的路径。根据安装选项,您的文件可能不会安装在那里。使用"DataSource=|DataDirectory|''MyDatabase.sdf;..."的连接字符串,如此处所述。

  2. 即使您的数据实际存储在那里,根据用户权限,用户也可能无法写入该目录。此外,当用户卸载或更新您的应用时,他的数据将被删除。人们不喜欢这样。您应该将数据复制到用户可写的文件夹中;前面的链接也显示了如何执行此操作。

  3. 如果你有一个 Visual Studio 项目,其中数据库是项目的一部分,则它可能会将"复制到输出目录"属性设置为"复制"。这意味着每次在调试器中运行时,您都会从源项目中复制一个全新的数据库,覆盖之前的任何内容。任何更改都将在此临时输出文件夹中,而不是原始源数据中。再次调试应用时,将删除临时副本。在此回答中进一步解释。