LocalDB MDF 文件 属性 "Copy if newer" 是如何工作的

How LocalDB MDF file property "Copy if newer" works

我在 Visual Studio 2012 年使用 .NET Framework 4.5 开发我的应用程序并使用 MDF 文件作为本地数据库。这里的问题是在运行时对数据所做的更改不会永久保存。但是,我能够在运行时检索数据甚至保存它,但它们不会显示在服务器资源管理器中。我已经将MDF文件的"Copy to Output directory" 属性设置为"Copy if newer",但问题依然存在。我该如何解决?

这是我应用程序 app.config 中的连接字符串。我之前曾尝试过单独的数据集 .xsd 文件但无济于事。

<connectionStrings>
<add name="EA_Logistics_Control.Properties.Settings.LogisticsLocalDBCS"
  connectionString="Data Source=(LocalDB)\v11.0
AttachDbFilename=|DataDirectory|\LocalDBs\LogisticsLocalDB.mdf;Integrated
Security=True"
  providerName="System.Data.SqlClient" />
</connectionStrings>

有些人可能会建议:

  1. 使用 SQLExpress 作为服务器而不是 LocalDB 或者
  2. 尝试以编程方式连接到 LocalDB 并替换 bin\Debug "folder_name\file_name.mdf"

但是它们不是实际的解决方案,只是替代方案。谁能解释一下这里发生了什么?我该如何解决?

根据要求,C#代码为:

DateTime dt = DateTime.Now;
string CDate = dt.Month + "/" + dt.Day + "/" + dt.Year;
int norid = 0, neeid = 0, cfrom = 0, cto=0;

SqlConnection SCon = new SqlConnection(ConfigurationManager.ConnectionStrings["EA_Logistics_Control.Properties.Settings.LogisticsLocalDBCS"].ConnectionString);

if (SCon.State == ConnectionState.Closed)
    SCon.Open();
SqlCommand SCom = new SqlCommand("INSERT INTO Consignments VALUES(@CNo, @CDate, @InvoiceNo, @SignorID, @SigneeID, @TravelFrom, @TravelTo, @Packages, @Contents, @VehicleNo, @Rate, @Weight, @Amount, '')", SCon);

SCom.Parameters.AddWithValue("CNo", TB_IC_CN.Text);
SCom.Parameters.AddWithValue("CDate", CDate);
SCom.Parameters.AddWithValue("InvoiceNo", TB_IC_O_Inv.Text);
SCom.Parameters.AddWithValue("SignorID", norid);
SCom.Parameters.AddWithValue("SigneeID", neeid);
SCom.Parameters.AddWithValue("TravelFrom", cfrom);
SCom.Parameters.AddWithValue("TravelTo", cto);
SCom.Parameters.AddWithValue("Packages", TB_IC_NUM_O_Pkgs.Text);
SCom.Parameters.AddWithValue("Contents", TB_IC_Desc.Text);
SCom.Parameters.AddWithValue("VehicleNo", TB_IC_O_Veh.Text);
SCom.Parameters.AddWithValue("Rate", TB_IC_NUM_O_Rate.Text);
SCom.Parameters.AddWithValue("Weight", TB_IC_NUM_O_Wt.Text);
SCom.Parameters.AddWithValue("Amount", TB_IC_NUM_Amt.Text);
int resRows = SCom.ExecuteNonQuery();
if (resRows > 0)
{
    MessageBox.Show("New entry has been inserted.");
}

它确实显示了一个消息框,我还看到调试时受影响的行数。

我从@SamiKuhmonen 和@BrendanGreen 那里得到了关于这个问题的帮助,解决方案是我正在通过服务器资源管理器检查项目文件夹的 MDF 文件中是否存在数据,我应该做的是检查 MDF bin\Debug 文件夹中的文件,我的数据是永久文件夹。我通过在服务器资源管理器中创建一个新连接来输出 MDF 文件来做到这一点。我错误地认为更新的 MDF 文件将覆盖项目文件夹中的文件,因为它应该是 "Copy if newer" 的功能。实际上它将原始文件复制到 bin 文件夹而不是其他方式。很明显,对于全新安装,MDF 填充将为空,部署后,用户端的应用程序将仅引用部署的文件,即类似于 bin\Debug.

中的文件