- - PR -
DataSet行削除のDBへの反映
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-08-06 14:53
お世話になります。
VB.NET、SQLServer2000 現状SqlDataAdapter経由で、データベース操作をしています。 新規登録及び、更新に関しては問題なく操作できるのですが、 削除となると、うまくいかない状況に陥ってしまっています。 現状、3つの方法を試したのですが、どれもうまいこといかなくて困っています。 どなたか解決案がありましたら、教えてください。 以下@、Aでは、 「削除された行を通して、その行の情報にアクセスすることはできません」 Bでは、エラーにはならないのでが、DBに反映されない状態になっています。 @ Dim bm As BindingManagerBase = BindingContext(DsData1, "tbl_sample") bm.CancelCurrentEdit() bm.RemoveAt(bm.Position) bm.EndCurrentEdit() SqlDataAdapter1.Update(DsData1) A dataset.Tables("tbl_sample").Rows(grdSample.CurrentCell.RowNumber).Delete() SqlDataAdapter1.Update(DsData1) B Dim cm As CurrencyManager = _ CType(grdSamplef.BindingContext(DsData1, "tbl_sample"), CurrencyManager) cm.RemoveAt(cm.Position) cm.Refresh() SqlDataAdapter1.Update(DsData1) 以上、よろしくお願いいたします。 [ メッセージ編集済み 編集者: リオッタ 編集日時 2004-09-15 17:46 ] | ||||
|
投稿日時: 2004-08-06 15:08
1,3では「削除された〜」で、2はエラーにならないが反映されない、ではないですか? BindingManagerBase.RemoveAtは、行データそのものを削除します。したがって、なくなったものにアクセスすることはできません。 DataRow.Deleteは、RowStateをDeletedに変化させます。こうなると、行の現在の値にはアクセスできなかったと思います。 Update(DataTable)を使ってみてください。 | ||||
|
投稿日時: 2004-08-06 16:41
1、2ではデータベースから削除はされているのですよね?
ということは、UpdateのSQLが実行されたあとに、その行の現在値にアクセスしようとするコードがどこかにあるのかもしれませんね。たとえば、DataTable.OnRowChangingなどが発生する場合があるみたいです。 | ||||
|
投稿日時: 2004-08-06 17:14
Jittaさん
お世話になります。 早速の返答ありがとうございます。
こちらの不備でした。 @ABともにエラーになってました。 現状、UPDATE(DataTable)を使用して作成しています。 ※参考書には@の方法を紹介してたんですが、 確かに行全体を削除してしまったら、アクセスは出来ませんよね^^; 茄子さん そういう事象もある訳ですね;; | ||||
|
投稿日時: 2004-08-07 14:16
Osです。
更新コマンドについて情報が少なく的外れかもしれませんが、 DataTableの削除行にアクセスできないことに起因するのであれば、 以下の方法もあります。 DataTableの削除行を抽出するメソッド Dim rows() AS DataRow = DataTable.Select(string, string, DataViewRowState.Deleted) この抽出したDataRow()をUpdateメソッドの引数に設定することが可能です。 以上 | ||||
|
投稿日時: 2004-08-07 15:13
プロジェクト-新しい項目の追加-データフォームウィザードで出てくるコードを参考にされたらどうでしょうか?
_________________ えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12 えムナウのプログラミングのページ Blog1 Blog2 | ||||
|
投稿日時: 2004-08-08 21:28
お世話になります。
たくさんのアドバイスありがたく勉強させてもらっています。 どうしてもエラーが出てしまってるので、 自分のやろうとしてることが間違ってるのではないかと思い、書き込みます。 ご意見アドバイスよろしくお願いします。 現状、作りたい画面として、 ひとつのフォームに一覧と、その一覧に対しての詳細がある画面です。 DataGridの一覧から、レコードをダブルクリック ↓ リストの下部に詳細を表示 ↓ 更新、新規追加、削除ボタンでデータベースにアクセス ※現状更新、新規追加は問題なく動作している Webフォームの遷移にあるように、 同一フォーム内に詳細を表示させるのであれば、DataGridでない方がいいのでしょうか? 以上よろしくお願いします。 | ||||
|
投稿日時: 2004-08-09 08:39
SqlDataAdapter.RowUpdatingイベントをハンドルして、実行しようとしてるSQL文をデバッグプリントしてみてください。
Command引数のCommandTextは、パラメータは展開しないので、適切に展開してください。 |