2013-02-26 33 views
3

我有一個在visual studio designer中創建的數據集。它有一個tableadaptor收費。tableadaptor - 刪除行

收費表中的一列是'預訂'。此列不是主鍵。

我想刪除所有行「預訂」的值是27

我添加了一個查詢到名爲DeleteByBooking的chargesTableAdaptor。這是代碼:

DELETE FROM charges 
WHERE  (chargesid = @Original_chargesid) 

在我的代碼,然後運行:

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

儘管代碼建立罰款,並應用程序運行正常,沒有行從數據庫中刪除!

我在做什麼錯誤?

回答

2

我添加了一個查詢到名爲DeleteByBooking

的chargesTableAdaptor如果手動,你必須手動調用您的TableAdapter實例這種方法添加查詢:

chargesTableAdapter.DeleteByBooking(27); 

如果你想要在您的(強類型)DataSet,DataTable或DataRow上使用Update功能,必須提供TableAdapterDeleteCommand

MSDN

TableAdapter的Update方法

的TableAdapter使用數據命令來讀取並從 數據庫寫。 TableAdapter的初始填充(主)的查詢被用作 基礎用於創建相關聯的數據表的模式,以及 將InsertCommand,UpdateCommand和的DeleteCommand與TableAdapter.Update方法相關聯的命令 。這意味着, 調用TableAdapter的Update方法執行創建 當最初配置TableAdapter的,,而不是報表 其他查詢之一,TableAdapter的查詢配置 嚮導添加

請注意,如果您在TableAdapter配置嚮導中選擇了一個表,則會自動創建命令。如果您加入多個表格,則必須手動創建更新,插入和刪除命令。

+0

對不起,我原來的帖子中有一個錯誤。我的刪除查詢稱爲DeleteBookingCharges因此,我上面的代碼的第一行與您在答案中建議的相同。當它到達那條線時它沒有做任何事情?!謝謝 – 2013-02-27 22:51:49

+0

@MthetheWWinter:對不起,我不太關注。你有沒有在你的TableAdapter中提供一個delete-command?然後,您可以刪除該行通過調用'chargeRow.Delete();'後跟'this.chargesTableAdapter.Update(this.quick_quoteDataSet.charges);'。如果你想刪除它而不使用'Update',你必須提供和手動查詢,你可以使用像'chargesid'這樣的必要參數進行調用。順便說一句,'EndEdit'沒有必要,試圖省略它,我不知道它有什麼後果。 – 2013-02-27 23:04:48

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(); 
} 

我希望它能幫助你。 ;)