vbとoracleとsqlldrでだいぶ詰まったので泣きながら記事を書く。

背景

vb.netでwebアプリケーションを作成。
sqlldrでcsvを取り込む。
ctlファイルは以前利用していたものを流用。

問題

コマンドプロンプト上では動くことを確認。

が、vb上で動かない。
System.Diagnostics.Process()じゃダメっぽい?
Shellとかいうやつから呼び出す?
とかいろいろ試行錯誤の末にダメだったところがわかってきたので、如何に確認すべきところを羅列しとく。

チェックポイント

  • Shell(“コマンド”, DOS窓をどうするか, 実行している処理を待つかどうか)を利用する。
  • 戻り値はvb側に戻ってこないので適宜吐き出す必要がある。
  • sqlldrを直接呼び出すのはダメっぽい。バッチファイルをかませる必要がある。
    xxx.bat ユーザID パスワード ホスト サービス ctlファイル置いてあるディレクトリ
  • バッチファイルのパラメータにはlog=も指定しないとダメだった。
    (コマンドプロンプトからは不要だった。おおかたデフォルトの位置だとiisが触れなかったんだろう)
    コマンドはこんな感じになった。
    sqlldr %1/%2@%3/%4 control=%5\CONTROL.ctl log=%5\CONTROL.log
  • バッチファイルの権限不足で弾かれたりもしていた。カッとなってEveryoneにフルコントロールを与えたら通った。
    参考にはしないでほしい。しないか。

コメント