使用基于服务的数据库时数据丢失

本文关键字:数据库 数据 服务 于服务 | 更新日期: 2023-09-27 18:18:49

我使用命令"insert into"向数据库添加一条记录,但是当我运行应用程序时,我添加的数据不存在,即数据库为空。

我已经关闭了连接,但是没有存储数据,我该怎么办?

代码:

SqlConnection cn = new SqlConnection(global::app.Properties.Settings.Default.DatabaseConnectionString); 
try 
{ 
    string  sql = "INSERT INTO tbl (field) VALUES ('"+ lblText.Text + "');";  
    SqlCommand sqlc = new SqlCommand(sql, cn); 
    cn.Open(); 
    sqlc.ExecuteNonQuery(); 
} catch (Exception ex) { } finally { cn.Close(); }

使用基于服务的数据库时数据丢失

提供Zelig是正确的,您不应该忽略异常,所以要做的第一件事是确认异常没有被抛出。

假设没有例外,Alejandro是正确的,您很可能每次都覆盖数据库。这是默认行为。

他是,然而,在你的应用程序中使用MDF数据文件是错误的。只要它不是一个多客户端应用程序,这样做就没有错。在运行时,数据库仍然连接到SQL Server实例。

当您将基于服务的数据库添加到项目中时,MDF文件将成为源文件。就像所有源文件一样,运行的应用程序对它一无所知。在构建时,该MDF文件与EXE一起复制到输出文件夹中。它是你在运行时连接到的那个副本以及你对它进行更改的那个副本。默认情况下,每次构建时都会创建一个新副本,从而覆盖对旧副本所做的任何更改。

在解决方案资源管理器中选择您的数据文件并打开"属性"窗口。将"Copy to output directory"属性从默认的"Copy always"更改为"Copy if newer"。现在,只有当你真的改变了源文件,例如改变了模式,才会创建一个新的副本。这意味着您在一次运行期间所做的任何更改将在下次运行时保留在数据库中,即使在此期间构建了项目。如果您想在数据库中查找数据,只需确保在输出文件夹中查找副本,而不是在项目文件夹中查找源。