gpt4 book ai didi

c# - SqlAdapter Update() 只插入值。

转载 作者:太空宇宙 更新时间:2023-11-03 16:15:00 25 4
gpt4 key购买 nike

我有一个名为 Inventory 的表,我想删除它的第一行。为此,我创建了一个名为 InventoryDAL 的类。这是代码:

public class InventoryDAL
{
private string cnString = string.Empty;
private SqlDataAdapter da = null;

public InventoryDAL(string connectionString)
{
cnString = connectionString;
da = new SqlDataAdapter("Select CarID, Make, Color, PetName From Inventory",
connectionString);
SqlCommandBuilder builder = new SqlCommandBuilder(da);
da.DeleteCommand = builder.GetDeleteCommand();
da.InsertCommand = builder.GetInsertCommand();
da.UpdateCommand = builder.GetUpdateCommand();
}

public DataTable Inventory()
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}

public void UpdateInventory(DataTable modifiedTable)
{
da.Update(modifiedTable);
}
}

我还创建了一个小程序来尝试:

class Program
{
static void Main(string[] args)
{
InventoryDAL inv = new InventoryDAL(@"Data Source=MYPC;Initial Catalog=AutoLot;Integrated Security=True;Pooling=False");
DataTable dt = inv.Inventory();
dt.Rows.RemoveAt(0);
inv.UpdateInventory(dt);
Console.ReadKey(true);
}}

但它不起作用。经过一些尝试后,我意识到 .Update() 只有在我插入数据时才有效。

最佳答案

使用 DataTable.RemoveAt() 从 DataTable 对象中完全删除行,因此 SqlDataAdapter 不知道在数据源中删除它。您必须使用 DataTable.Rows[x].Delete() 方法。这标记了要删除的行,这样适配器就知道要对其调用 SQL delete 语句。

所以你的代码应该变成:

class Program
{
static void Main(string[] args)
{
InventoryDAL inv = new InventoryDAL(@"Data Source=MYPC;Initial Catalog=AutoLot;Integrated Security=True;Pooling=False");
DataTable dt = inv.Inventory();
dt.Rows[0].Delete();
inv.UpdateInventory(dt);
Console.ReadKey(true);
}
}

参见 here详细了解如何将更改推送回数据源。

关于c# - SqlAdapter Update() 只插入值。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com