0

这是我在此类论坛的第一篇文章,所以请原谅我的无知。

我有一个带有 SQL Server 2008 mdf 数据库的 WPF 应用程序。

我使用以下代码将新记录插入到名为 Sales_TBL 的表中。

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\SalesDB.mdf;Integrated Security=True;User Instance=True");

con.Open();
SqlTransaction tran = con.BeginTransaction();

SqlCommand cmd =
      new SqlCommand("INSERT INTO  Sales_TBL (Date, Sale_ID,Cust_Fname, Cust_Lname,  Comments, Total_Sale_Price) VALUES (@salesDate, @SalesID, @CFname, @CLname, @Comms, @TotSalePrice)", con);
cmd.Parameters.AddWithValue("@salesDate", saleDate_DB);
cmd.Parameters.AddWithValue("@SalesID", salesID_DB);
cmd.Parameters.AddWithValue("@CFname", custFname_DB);
cmd.Parameters.AddWithValue("@CLname", custSname_DB);
cmd.Parameters.AddWithValue("@Comms", comments_DB);
cmd.Parameters.AddWithValue("@TotSalePrice", totSalesPrice_DB);

cmd.Transaction = tran;
cmd.ExecuteNonQuery();
tran.Commit();
con.Close();

//navigate to another page to display the contents of the sales_tbl
recPage printRecPage = new recPage();
this.NavigationService.Navigate(printRecPage);

然后我导航到另一个页面 (recPage) 并使用以下 Sales_TBL 代码的所有内容填充列表视图 (SoldItemsmListView):

DataClasses1DataContext dc = new DataClasses1DataContext();

var q =
from a in dc.GetTable<Sales_TBL>()
select new RecData 
{
   salesID = (string)a.Sale_ID,
   salesDate = (DateTime)a.Date,
   custFname = (string)a.Cust_Fname,
   custSname = (string)a.Cust_Lname,
   saleComms = (string) a.Comments,
   totPrice = (double) a.Total_Sale_Price,
};
SoldItesmListView.DataContext = q;

现在上述所有工作正常,但是我遇到的唯一问题是通过插入查询输入的最后一条记录不会显示在上面的列表视图中(以前插入的数据确实显示在列表视图中),记录被插入数据库成功,当我关闭并重新运行应用程序时,记录然后显示在列表视图中。

我希望这是有道理的,我不知道为什么会这样,我搜索了几个论坛并没有发现类似的问题。

任何帮助或建议将不胜感激。

4

1 回答 1

0

请指定您使用的 ORM(实体框架、Linq2Sql、...)。可能它缓存了先前查询的结果并且不知道该表已更新,因为您使用常规 Ado.Net 命令对其进行了更新。

您应该使用相同的 ORM 更新表,或者在检索表数据之前找到清除其缓存的方法。

于 2012-08-03T11:53:40.647 回答