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

在一个项目中,我有一个本地数据库,(我使用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

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

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

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

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

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