- PR -

RDBのテーブルをDataSet経由で別のテーブルに出力したい

投稿者投稿内容
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-12-02 17:12
引用:

ぷじょーさんの書き込み (2004-12-02 16:53) より:
引用:

誤認してました。
確かにImportRowではRowStateは元のままです。



わざわざ確認までして頂いてありがとうございました。




空のDataTableにAddする時に、ItemArrayを渡してあげるとRowStateがAddになりませんか?
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-12-02 17:56
ぷじょーさん、こんばんは。

引用:

データセットの件数分ループして、SQLのInsert文を発行するより
Updateメソッド一発のほうが早いかと思いまして・・・


早いんですか?
内部的には一件ずつSQL発行してるんじゃありませんでしたっけ?

DataTable だとかに拘らずに、単純なリスト/コレクション系のクラス(ArrayListとか)を組み合わせてデータを取得・加工して別テーブルへ挿入する、というやり方の方が、面倒が無くて良さそうな気もします。

データの加工部分がクライアント側でないと出来ないのなら仕方ありませんが、そうでなければ、ストアド・プロシージャでやらせた方が効率よさそうですね。

たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-12-02 18:39
ストアドプロシジャでコピーして、コピーしたテーブルを.NETで作った
プログラムで開けば、同じにならないですか。

もうすこし、どういうことをしたいかがわかれば、もっとよい方法を
提示できる人がいるかもしれませんよ。

_________________
たつごろー
codeseek
こみゅぷらす
ぷじょー
会議室デビュー日: 2004/07/08
投稿数: 16
投稿日時: 2004-12-02 19:03
引用:

内部的には一件ずつSQL発行してるんじゃありませんでしたっけ?



内部的には1件ずつ処理してるという話ですが、
でも早い気がします。
.NETのループ処理が遅いんですかね。
ぷじょー
会議室デビュー日: 2004/07/08
投稿数: 16
投稿日時: 2004-12-02 19:11
引用:

もうすこし、どういうことをしたいかがわかれば、もっとよい方法を
提示できる人がいるかもしれませんよ。



そうですよね。すみません。
Aテーブルからデータを抽出します。具体的には空き時間のカレンダーのようなものです。
ただ、そのままでは使えない形なので、加工してデータテーブルに保持してます。

そのカレンダーを処理の中で随時、更新します。
空き時間が埋まっていく感じです。

処理が終わったあと、そのデータテーブルのデータをDBに書き出したいのですが、
加工してあるのでAテーブルには戻せません。
そこでBテーブルを用意して、そこに書き出したいのです。
ここで、データテーブルの各行のRowStateがAddedなら、UpdateメソッドでInsertコマンドが実行され、テーブルBにInsertできるのですが、処理の中で更新しているため、
RowStateはModifiedになってしまってます。
これではInsertコマンドではなく、Updateコマンドが実行されてしまうのです。

データテーブルを1件ずつループして、SQLを発行すればよいのですが、
それでは遅い気がするので、何か早くInsertできる方法はないか検討しております。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-12-02 19:19
> 内部的には1件ずつ処理してるという話ですが、
> でも早い気がします。
> .NETのループ処理が遅いんですかね。

とか

>データテーブルを1件ずつループして、SQLを発行すればよいのですが、
>それでは遅い気がするので、何か早くInsertできる方法はないか検討しております。

とか、ちゃんと検証してから言ってますか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-12-02 22:06
引用:

ぷじょーさんの書き込み(2004-12-02 15:31)より:

データセットの件数分ループして、SQLのInsert文を発行するより
Updateメソッド一発のほうが早いかと思いまして・・・


なんだか、とっても誤解されていませんか?OracleDataAdapter.Updateメソッドを実行すると、DataTable内のすべてのDataRow(または指定したDataRow配列)を走査して、UpdateCommand, InsertCommand, DeleteCommandまたは何もしないのどれかを行うんですよ?つまり、判定を行う分、Updateメソッドの方がリソースを喰います(いや、プログラムの手間はアレだけど)。
 で、もし「すべてInsertなんだ」ということがわかっているなら、UpdateCommandにINSERT文を指定してあげる、という手が使えます。おっと、思いついていらっしゃいますね。聞くより試してみる方が早いですよ。

_________________

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