ASP(vbs)でのBCPの実行について
開発言語:ASP(vbs)
使用DB:SQL Server2005(海外版)
クライアントPC:WinXP(USA版OS)
APサーバー:WinServer2003(日本にあり、USA版OS)[bcp.exeを動作させる為だけにSQLServerを入れています]
DBサーバー:WinServer2003(海外サーバー)
クライアントからCSVをAPサーバーにUpLoadし、DBサーバーにインポートしたいのですが出来ません。
インポート方法として、BCPとBulkが使用出来る事を調べたのですが
Bulkでは、DBServerにCSVファイルがないとインポート出来ないようで
DBサーバーにファイルを置いてはいけない仕様となっている為使用出来ません。
なので、bcpを利用しようと思い現在開発を進めていまた。
コマンドプロンプト上ではBCPコマンドは動作するようになったのですが
ASP上で動作確認しようとしたところ、正常終了(エラーは帰ってこない)はするのですが
実際にデータがインポートされている様子がありません。
●basp21を使用した場合(basp21はインストール済)
【ソース】
Set bobj = Server.CreateObject("basp21")
rc = bobj.Execute("bcp DB名 IN C:\a.csv -t , -S サーバー名 -U ユーザー名 -P パスワード -E -F 2 -c",1,stdout)
select case rc
case 0 : response.write("正常終了")
case -1 : response.write("コマンドエラー")
case -2 : response.write("タイムアウト")
end select
【表示結果】
>正常終了
と表示されますが、実際指定したテーブルにデータがインポートはされていません。
●WScriptを使用した場合
【ソース】
Set objShell = Server.CreateObject("WScript.Shell")
objShell.Run "bcp DB名 IN C:\a.csv -t , -S サーバー名 -U ユーザー名 -P パスワード -E -F 2 -c"
response.write "エラーナンバー:" & Err.Number & "<br>"
【表示結果】
>エラーナンバー:0
上記も同様に、実際指定したテーブルにデータがインポートはされていません。
●番外:コマンドをバッチ化してASPから実行
【ソース】
Set objShell = Server.CreateObject("WScript.Shell")
objShell.Run "C:\a.bat"
【表示結果】
>Microsoft VBScript runtime error '800a0046'
>Permission denied
>a.asp, line 2
こちらはただ試してみただけなのですが
普通、権限を割り振らないとASPからバッチファイル実行するのは無理ですね。
コマンドプロンプトで同コマンドを実行するときちんとインポートされている事
ASP上で実行するとエラーで帰ってくるならまだしも戻り値が0なので正常終了しているが、結果が伴わない(インポートされていない)事
が、相成って困っています。
最初の2つのコーディングでマズい所があるかどうか
また、どこを直せば正常に動くのか、について
申し訳ないですが、どうかご教授お願いします。
お礼
分かりやすい例の載ったサイトを教えていただき、ありがとうございました!