3

VisualStudioDesignerで作成されたデータセットがあります。それは料金のためのtableadaptorを持っています。

料金表の列の1つは「予約」です。この列は主キーではありません。

'booking'の値が27であるすべての行を削除したいと思います。

DeleteByBookingというクエリをchargesTableAdaptorに追加しました。それはコードです:

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

私は DeleteByBooking と呼ばれる料金表アダプターにクエリを追加しました

クエリを手動で追加する場合は、TableAdapter インスタンスでこのメソッドを手動で呼び出す必要があります。

chargesTableAdapter.DeleteByBooking(27);

Update(厳密に型指定された) DataSet、DataTable、または DataRow で機能を使用する場合DeleteCommandは、TableAdapter.

MSDN

TableAdapter Update メソッド

TableAdapter は、データ コマンドを使用してデータベースの読み取りと書き込みを行います。TableAdapter の最初の Fill (メイン) クエリは、関連するデータ テーブルのスキーマを作成するための基礎として使用されるほか、 TableAdapter.Updateメソッドに関連付けられた InsertCommand、UpdateCommand、およびDeleteCommandコマンドも使用されます。つまり、TableAdapter の Update メソッドを呼び出すと、TableAdapter が最初に構成されたときに作成されたステートメントが実行され、TableAdapter クエリ構成ウィザードで追加された追加のクエリは実行されません。

TableAdapter 構成ウィザードで 1 つのテーブルを選択すると、コマンドが自動的に作成されることに注意してください。複数のテーブルを結合する場合は、Update、Insert、および DeleteCommand を手動で作成する必要があります。

于 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 に答える