- PR -

DataSetのコピーでは更新できない

1
投稿者投稿内容
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2008-03-14 14:36
申し訳ありません、またまた困ったことが

VB2005です。

2つのDataSetを使って(AとB)
AのDataSetの内容をBのDataSetにセットし

SqlDataAdapterのInsertCommandを実行処理をしていました。
---- コード --------------------------
For Each dr In MyGPDS.Tables(0).Rows
workrow = MyDS.Tables("B").NewRow
workrow("KMK") = dr("KMK")
MyDS.Tables("B").Rows.Add(workrow)
Next
DataAdapter.Update(MyDS, "B")
------------------------------------
このコードを
いちいち項目を1個ずつセットするのではなく
(項目数が多いとコーディングが大変な為)
DatatSetごとCopyして行いたいのですが
エラーになってしまいます。

MyDS = MyGPDS.Copy
DataAdapter.Update(MyDS, "B")

このようなことはできないのでしょうか?
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2008-03-14 15:06
「DataSet」「コピー」でググると幸せになれるかも。

あなたのどのスレもそうですが、もうちょっと自己解決の努力に時間を費やしてみてはいかがですか。
ugaya
会議室デビュー日: 2006/08/03
投稿数: 18
投稿日時: 2008-03-14 20:44
ROWSTATEの変更
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=41667&forum=7&start=0

で話していましたね。

コード:
For Each dr In MyGPDS.Tables(0).Rows 
	workrow = MyDS.Tables("B").NewRow 
	workrow("KMK") = dr("KMK") 
	MyDS.Tables("B").Rows.Add(workrow) 
Next 
DataAdapter.Update(MyDS, "B")



ではMyDSのBテーブルに新規行を追加しているので、各行はAddedにマークされ、Update呼び出し時にInsert文が発行されます。

しかし
コード:
MyDS = MyGPDS.Copy 
DataAdapter.Update(MyDS, "B") 



このコードではMyGPDSの行状態に依存していしまいます。
Fillした直後はAcceptChangesが暗黙で呼び出され行状態は常にUnchangedです。
したがってMyGPDSのデータがデータベースへのFillで構成された場合Updateメソッドでは更新できません。

コード:
MyDS = MyGPDS.Copy

For Each dr In MyDs.Tables("B").Rows 
	dr.SetAdded
Next 

DataAdapter.Update(MyDS, "B") 



これで大丈夫なはずです。なんらかのループは避けられないと思います。
同じような処理が多くあるのなら、共通メソッドを検討してください。
DataTableと望むべき行状態を引数にとり、更新に使用できるDataTableを返すメソッドでも作ってみるとよいと思います。
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2008-03-18 10:59
遅くなりすいません。

ugayaさんありがとうございす。
copyで解決しました。
1

スキルアップ/キャリアアップ(JOB@IT)