- - PR -
RDBのテーブルをDataSet経由で別のテーブルに出力したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-02 17:12
空のDataTableにAddする時に、ItemArrayを渡してあげるとRowStateがAddになりませんか? _________________ 「伝える」とは「人に云う」と書く。 http://d.hatena.ne.jp/NAL-6295/ | ||||||||
|
投稿日時: 2004-12-02 17:56
ぷじょーさん、こんばんは。
早いんですか? 内部的には一件ずつSQL発行してるんじゃありませんでしたっけ? DataTable だとかに拘らずに、単純なリスト/コレクション系のクラス(ArrayListとか)を組み合わせてデータを取得・加工して別テーブルへ挿入する、というやり方の方が、面倒が無くて良さそうな気もします。 データの加工部分がクライアント側でないと出来ないのなら仕方ありませんが、そうでなければ、ストアド・プロシージャでやらせた方が効率よさそうですね。 | ||||||||
|
投稿日時: 2004-12-02 18:39
ストアドプロシジャでコピーして、コピーしたテーブルを.NETで作った
プログラムで開けば、同じにならないですか。 もうすこし、どういうことをしたいかがわかれば、もっとよい方法を 提示できる人がいるかもしれませんよ。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2004-12-02 19:03
内部的には1件ずつ処理してるという話ですが、 でも早い気がします。 .NETのループ処理が遅いんですかね。 | ||||||||
|
投稿日時: 2004-12-02 19:11
そうですよね。すみません。 Aテーブルからデータを抽出します。具体的には空き時間のカレンダーのようなものです。 ただ、そのままでは使えない形なので、加工してデータテーブルに保持してます。 そのカレンダーを処理の中で随時、更新します。 空き時間が埋まっていく感じです。 処理が終わったあと、そのデータテーブルのデータをDBに書き出したいのですが、 加工してあるのでAテーブルには戻せません。 そこでBテーブルを用意して、そこに書き出したいのです。 ここで、データテーブルの各行のRowStateがAddedなら、UpdateメソッドでInsertコマンドが実行され、テーブルBにInsertできるのですが、処理の中で更新しているため、 RowStateはModifiedになってしまってます。 これではInsertコマンドではなく、Updateコマンドが実行されてしまうのです。 データテーブルを1件ずつループして、SQLを発行すればよいのですが、 それでは遅い気がするので、何か早くInsertできる方法はないか検討しております。 | ||||||||
|
投稿日時: 2004-12-02 19:19
> 内部的には1件ずつ処理してるという話ですが、
> でも早い気がします。 > .NETのループ処理が遅いんですかね。 とか >データテーブルを1件ずつループして、SQLを発行すればよいのですが、 >それでは遅い気がするので、何か早くInsertできる方法はないか検討しております。 とか、ちゃんと検証してから言ってますか? | ||||||||
|
投稿日時: 2004-12-02 22:06
なんだか、とっても誤解されていませんか?OracleDataAdapter.Updateメソッドを実行すると、DataTable内のすべてのDataRow(または指定したDataRow配列)を走査して、UpdateCommand, InsertCommand, DeleteCommandまたは何もしないのどれかを行うんですよ?つまり、判定を行う分、Updateメソッドの方がリソースを喰います(いや、プログラムの手間はアレだけど)。 で、もし「すべてInsertなんだ」ということがわかっているなら、UpdateCommandにINSERT文を指定してあげる、という手が使えます。おっと、思いついていらっしゃいますね。聞くより試してみる方が早いですよ。 _________________ |