【问题标题】:Cannot insert data into Local Database in WPF无法将数据插入 WPF 中的本地数据库
【发布时间】:2012-05-08 12:47:34
【问题描述】:

在一个项目中,我有一个本地数据库,(我正在使用数据网格查看数据),但问题是当我使用插入查询插入数据库时​​,插入不持久,即当我重新运行时应用程序中,数据库没有更改,并且更改不会反映在数据库视图中(在 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

【问题讨论】:

    标签: c# wpf .net-4.0 database-connection


    【解决方案1】:

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

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

    【讨论】:

    • 它在桌面上,如何确保我有必要的权限?
    【解决方案2】:
    1. Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\MyDatabase.sdf" 是应用程序文件夹的路径。根据安装选项,您的文件可能不会安装在那里。使用"DataSource=|DataDirectory|\\MyDatabase.sdf;..." 的连接字符串,如here 所述。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-13
      • 2018-07-04
      • 2013-03-02
      • 2021-07-23
      • 2017-10-24
      相关资源
      最近更新 更多