- PR -

VB.NETでエクスポート機能を付けたい

投稿者投稿内容
ふむふむ
会議室デビュー日: 2004/06/02
投稿数: 14
投稿日時: 2004-06-03 10:03
VB.NETとOracle9iで作業しています。

OracleテーブルにあるデータをVB.NETから
CSV形式でエクスポートしたいのですが、その
方法が分かりません。SQL*Plusを使う方法など
調べたのですがイマイチよく分かりませんでした。
どなたかご存知の方がいらっしゃいましたら宜しくお願いいたします。

Selectでレコードを抽出し1つずつカンマをつけて
テキストに書き出すというのは、やはり件数が多いと
処理時間の問題につながるのでしょうか・・・
ヤマザキ
常連さん
会議室デビュー日: 2004/05/10
投稿数: 22
投稿日時: 2004-06-08 13:55
こんにちは。

フリーのOracleのエクスポーターを使用するというのは駄目なんでしょうか?
EXCELへの出力用のアドイン等もありますし。

私は、ビジュアル&データチェックが必要のため、VB.Netで、一度グリットに
SELECT表示してから、CSVに吐いてます。
EXCELに出力しないかぎり、処理時間はそう気にならないんじゃないでしょうか?
逆に件数が多いとき、プログレスバーとか併用すれば、体感的にいいと思われますが。

用途・使用者に応じて、というところでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-08 14:33
引用:

ふむふむさんの書き込み (2004-06-03 10:03) より:

OracleテーブルにあるデータをVB.NETから
CSV形式でエクスポートしたいのですが、その
方法が分かりません。SQL*Plusを使う方法など
調べたのですがイマイチよく分かりませんでした。
どなたかご存知の方がいらっしゃいましたら宜しくお願いいたします。


 何を調べて、どういう結果が得られ、それがどうわからなかったのでしょう?

 .NETを利用するなら、DataTableに取り込んで、カラム内のダブルクォーテーションをエスケープしてからダブルクォーテーションで囲み、カンマで区切って出力するだけ、だと思うのですが?
↑↑
 過程がわからない、ならこれで解決しますよね?過程はわかっているけど、どのメソッドを使えばよいのかわからない、ということ?それともダブルクォーテーションで囲まないからリターンコードやカンマの入ったデータで、データの区切りがゴチャゴチャになってしまったということ?それとも、ダブルクォーテーションをエスケープしなかったので、データとしてのダブルクォーテーションが消えてしまったとか?
ふむふむ
会議室デビュー日: 2004/06/02
投稿数: 14
投稿日時: 2004-06-09 10:15
ヤマザキさま、返答をありがとうございます。
Oracleのエクスポーターというものが
あるのですね、早速調べてみたいと思います!

現在は1レコードずつ抽出し、カンマを付けてCSVに
保存しています。ヤマザキさまのグリッドからの
格納というのは、カンマを付けずにCSV形式に保存できるのでしょうか?
SELECTし、DataGridに表示までは出来るのですが、その後の
処理を出来れば教えていただきたいです。
お忙しいところ申し訳ありません。
ふむふむ
会議室デビュー日: 2004/06/02
投稿数: 14
投稿日時: 2004-06-09 11:01
Jittaさま、返答ありがとうございます。

>何を調べて、どういう結果が得られ、それがどうわからなかったのでしょう?

説明不足で申し訳ありません。
VB.NETとOracleを使ったエクスポートでは
SQL*Plusを使う手法があるようなことが
かかれていたので、SQL*LoaderのようにShell関数で
呼び出して処理する方法を調べていました。
VB.NETでどのようなメソッドを使えば実現できるのか
分からなかったのです。

もう少しじっくり調べてから明確に記述しなければいけませんね!
以後気をつけます。

Jittaさまのアドバイスも参考にさせていただきます。
また分からないことがあると思いますが、どうぞ宜しくお願いします。

ヤマザキ
常連さん
会議室デビュー日: 2004/05/10
投稿数: 22
投稿日時: 2004-06-10 15:25
こんにちは。

Gridなどの配列からの処理は、データチェックとかも
必要となる場合も予想されるので、同じくカンマつけながらです。

ご存じかも知れませんが、
件数が多ければ、StringBuilder をお勧めします。
カラム数にも寄りますが、10000件程度でさえ、20倍程度差がでます。

Dim sb As New System.Text.StringBuilder
For Rows = 0 To Grid行 - 1
 For Cols = 0 To Grid列 - 1
  sb.Append(GridText(Rows, Cols)) 'Check Or Convert....
  sb.Append(",")
 Next
 sb.Append(vbCrLf)
Next
Dim sw As New StreamWriter(SaveFile, encShift_JIS)
sw.Write(sb.ToString)
sw.Close()
SaveFile.Close()


[ メッセージ編集済み 編集者: ヤマザキ 編集日時 2004-06-10 15:29 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-06-10 15:42
引用:

ヤマザキさんの書き込み (2004-06-10 15:25) より:

ご存じかも知れませんが、
件数が多ければ、StringBuilder をお勧めします。
カラム数にも寄りますが、10000件程度でさえ、20倍程度差がでます。


これはこれでまあそうなのですが、今回のような(ファイルに書き出す)場合なら直接Writerの方に書き出す方がいいように思います。
まあ、別に特別件数が多くなければ問題はないわけですが。

何らかの理由でメモリ上で作ってしまう必要があるとか、一気にファイルに書き出してしまう必要があるとか、まあ何か理由があるのなら別ですが。
ヤマザキ
常連さん
会議室デビュー日: 2004/05/10
投稿数: 22
投稿日時: 2004-06-10 16:17
こんにちは。

引用:

なちゃさんの書き込み (2004-06-10 15:42) より:

これはこれでまあそうなのですが、今回のような(ファイルに書き出す)場合なら直接Writerの方に書き出す方がいいように思います。



便乗になりますが、直接Writerへの方法というのは。。?
カンマつける処理をやりながら、直接Writerに書き出すという方法があるのでしょうか?
以前 str += hogehoge で処理してたら20秒弱もかかってたので、上記方法にしたのですが、
もっと効率の良い方法があれば、私も知りたいです。

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