无法在WPF中向本地数据库插入数据。

3
在一个项目中,我有一个本地数据库(我正在使用datagrid来查看数据),但问题在于当我使用插入查询插入到数据库时,插入不会持久化,即当我重新运行应用程序时,数据库没有改变,并且更改没有反映在数据库视图中(在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。
2个回答

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

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

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


0

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

即使这不是你短期问题,我建议找到一个不同的地方来存放sdf文件,比如其中一个AppData位置。期望能够写入你的安装位置并不是一个保证,这取决于你的应用程序是如何部署和在哪里部署的。


它在桌面上,如何确保我拥有必要的权限? - Ali Shahid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接