SqlAdapter Update()仅插入值。

时间:2013-04-15 19:04:16

标签: c# sql-server

我有一个名为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()仅在我插入数据时才有效。

1 个答案:

答案 0 :(得分:0)

使用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