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