3

我在 Visual Studio Designer 中创建了一个数据集。它有一个充电的tableadaptor。

费用表中的一列是“预订”。此列不是主键。

我想删除“booking”值为 27 的所有行。

我向chargesTableAdaptor 添加了一个名为DeleteByBooking 的查询。它的代码:

DELETE FROM charges
WHERE        (chargesid = @Original_chargesid)

然后在我的代码中运行:

this.chargesTableAdapter.DeleteBookingCharges(27);
this.chargesBindingSource.EndEdit();
this.chargesTableAdapter.Update(this.quick_quoteDataSet.charges);

尽管代码构建良好,并且应用程序运行正常,但没有从数据库中删除任何行!

请问我做错了什么?

4

2 回答 2

2

我向chargesTableAdaptor 添加了一个名为DeleteByBooking 的查询

如果手动添加查询,则必须手动在 TableAdapter 实例上调用此方法:

chargesTableAdapter.DeleteByBooking(27);

如果要在(强类型)DataSet、DataTable 或 DataRow 上使用该功能,则Update必须提供.DeleteCommandTableAdapter

MSDN

TableAdapter 更新方法

TableAdapter 使用数据命令来读取和写入数据库。TableAdapter 的初始填充(主)查询用作创建关联数据表架构的基础,以及与TableAdapter.Update方法关联的 InsertCommand、UpdateCommand 和DeleteCommand命令。这意味着调用 TableAdapter 的 Update 方法会执行最初配置 TableAdapter 时创建的语句,而不是使用 TableAdapter 查询配置向导添加的其他查询之一。

请注意,如果您在 TableAdapter 配置向导中选择一个表,则会自动创建这些命令。如果您加入多个表,您必须手动创建更新、插入和删除命令。

于 2013-02-26T23:29:05.237 回答
0

如果您使用 dataGrid 作为控件,您可以在没有 SQL 查询的情况下尝试此操作,同样您可以仅编辑数据集行来调整此代码。

DataSet.yourRow iAmARow;
try
{

   iAMARow = 
   this.yourDataSet.yourTable.FindByBooking(nameOfTheColumn);

   if (iAmARow != null)
   {
       iAmARow.Delete();
       this.yourTableAdapter.Update(this.yourDataSet);
       this.yourDataSet.yourTable.AcceptChanges();

   }

}
catch (SqlException ex)
{
   ex.StackTrace.ToString();
}   

我希望它可以帮助你。;)

于 2015-04-11T18:30:53.237 回答