无法在SQLite中更新记录

时间:2018-03-25 17:31:34

标签: c# list sqlite uwp sql-update

我有两张桌子。我正在尝试更新符合条件的记录。 虽然其中一个得到更新,但另一个没有。 这是OnNavigatedTo方法。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    currentProduct = e.Parameter as Product;

    NameBox.Text = currentProduct.Name;

    ReadAllProductsList dbproduct = new ReadAllProductsList();
    DB_ProductList = dbproduct.GetAllProducts();
    var productQuery = DB_ProductList.Where(Product => Product.Name == currentProduct.Name.Trim());
    List<Product> productList = new List<Product>();
    productList = productQuery.ToList();
}

以下是更新产品方法:

private async void UpdateProduct_Click(object sender, RoutedEventArgs e)
{
    currentProduct.Name = NameBox.Text;

    Db_Helper.UpdateDetails(currentProduct);//Update selected DB product Id

    List<Product2> product2List = new List<Product2>();
    ReadAllProduct2List dbproduct2list = new ReadAllProduct2List();
    DB_Product2 = dbproduct2list.GetAllProduct2();
    product2List = DB_Product2.Where(Product2 => Product2.ProductId == NameBox.Text.ToString()).ToList();


    for (int i = 0; i < product2List.Count -1; i++)
    {
        product2List[i].ProductId = NameBox.Text;
        Db_Helper.UpdateProduct2Details(product2List[i]);
    }

    Frame.Navigate(typeof(ProductsPage));
}

第一次更新有效,第一次更新产品表。 第二个更新不起作用,就好像第二个类型的列表为空。 我不确定我做错了什么。

这是DB_Helper代码:

public void UpdateDetails(Product ObjProduct)
{
    using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
    {

        var existingproduct = conn.Query<Product>("select * from Product where Id =" + ObjProduct.Id).FirstOrDefault();
        if (existingproduct != null)
        {

            conn.RunInTransaction(() =>
            {
                conn.Update(ObjProduct);
            });
        }

    }
}

DB_Helper

DatabaseHelperClass Db_Helper = new DatabaseHelperClass();

如果第一个表只能包含一个产品,则第二个列表可以包含多个产品名称的行。这就是我遍历列表以更新Product2表的原因。

我已经测试了这个列表,但它并不是空的。

1 个答案:

答案 0 :(得分:0)

确定。我设法通过使用foreach循环替换for循环来解决问题。

而不是:

cout<< static_cast<const void*>(x);

我写道:

for (int i = 0; i < product2List.Count -1; i++)
                    {
                        product2List[i].ProductId = NameBox.Text;
                        Db_Helper.UpdateProduct2Details(product2List[i]);

                    }

我不确定为什么for循环不起作用。