代码之家  ›  专栏  ›  技术社区  ›  positive perspective

无法更新SQLite中的记录

  •  -1
  • positive perspective  · 技术社区  · 7 年前

    我有两张桌子。我正在尝试更新符合条件的记录。 虽然其中一个得到更新,但另一个没有。 这是 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\U帮助程序代码:

    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 回复  |  直到 7 年前
        1
  •  0
  •   positive perspective    7 年前

    好啊我通过用foreach循环替换for循环来解决这个问题。

    而不是:

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

    我写道:

     foreach (product in product2List)
    {
    product.ProductId = NameBox.Text;
    Db_Helper.UpdateProduct2Details(product);
    

    我不知道为什么for循环最初不起作用。