小编典典

LocalDB MDF文件属性“如果更新会出现错误”的工作方式

sql

我正在使用.NET Framework 4.5在Visual Studio
2012中开发应用程序,并使用MDF文件作为本地数据库。这里的问题是在运行时对数据所做的更改不会永久保存。但是,我能够在运行时检索数据甚至将其保存,但它们不会显示在Server
Explorer中。我已经将MDF文件的“复制到输出目录”属性设置为“如果更新则复制”,但是问题仍然存在。我该如何解决?

这是我的应用程序的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.");
}

它的确显示了一个消息框,并且在调试时也看到了受影响的行数。


阅读 224

收藏
2021-04-14

共1个答案

小编典典

我在此问题上从@SamiKuhmonen和@BrendanGreen获得了帮助,解决方案是我正在通过服务器资源管理器检查项目文件夹的MDF文件中是否存在数据,我应该做的是检查bin
\
Debug中的MDF文件。我的数据是永久的文件夹。我是通过在服务器资源管理器中创建一个新连接以输出MDF文件来实现的。我错误地认为更新的MDF文件将覆盖项目文件夹中的文件,因为它应该是“如果较新则进行复制”的功能。实际上,它会将原始文件复制到bin文件夹,而不是其他方式。很显然,对于全新安装,MDF填充将为空,并且在部署之后,用户端的应用程序将仅引用已部署的文件,即类似于bin
\ Debug中的文件。

2021-04-14