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

C# 无法将数据插入WPF中的本地数据库,c#,wpf,.net-4.0,database-connection,C#,Wpf,.net 4.0,Database Connection,在项目中,我有一个本地数据库(我使用datagrid来查看数据),但问题是,当我使用插入查询插入数据库时,插入不会持续,即当我重新运行应用程序时,数据库不会更改,更改也不会反映在数据库视图中(Visual Studio中的查看表数据) 插入查询是: string dbCon = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\MyDa

在项目中,我有一个本地数据库(我使用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();
现在,当这段代码运行时,datagrid会更新,但更改不是永久性的。我做错了什么?
我正在使用Visual Studio 2010 Ultimate和Windows 7,您的应用程序运行在哪个文件夹中?如果它位于“程序文件”树中,则您可能没有sdf文件的写入权限(尤其是在Windows 7上,除非您在执行之前已关闭或提升了应用)

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

  • Path.GetDirectoryName(System.Reflection.Assembly.getExecutionGassembly().Location)+“\\MyDatabase.sdf”
    是应用程序文件夹的路径。根据安装选项的不同,您的文件可能不会安装在那里。如前所述,使用连接字符串
    “DataSource=|DataDirectory | \\MyDatabase.sdf;…”

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

  • 如果您有一个VisualStudio项目,其中数据库是项目的一部分,那么它可能会将“复制到输出目录”属性设置为“复制”。这意味着每次在调试器中运行时,都会从源项目中复制一个全新的数据库,覆盖以前存在的任何数据库。任何更改都将在此临时输出文件夹中,而不是原始源数据中。再次调试应用程序时,将删除临时副本。进一步解释请参见


  • 它在桌面上,如何确保我有必要的权限?