システム開発 備忘録











BCPを使ったバルクインサート(SQL Server)

*** *** *** *** ***


VB6で、BCPを起動してバルクインサートを行う
CSVファイルをVB6からSQLサーバーにバルクインサートする
・開発環境はSQL Server 2005
・CSVのレイアウトはテーブルレイアウトと同じとする。
・SQLのバルクインサートでは、サーバーのローカルドライブ以外の場所にある
ファイルの読込みができない場合が多い。そういうときはBCPを使う。
・「Microsoft SQL Server Native Client」(sqlncli.msi)がインストールされている
必要がある。
・bcp.exeとbcp.rllが必要(開発するEXEと同じディレクトリでよい)。
・戻り値の受け取りが簡単なのでWSHのオブジェクトを利用する。
 WSHが利用できないOS(Win2000より古いやつ)だと動作しない。


Dim strCSVFile As String
Dim strDataSource As String
Dim strInitialCatalog As String
Dim strSchema As String
Dim strTable As String
Dim strUserID As String
Dim strPassword As String

'CSVファイル名、DB接続情報の変数値代入部分は省略

'(RUN 実行結果の○×のみ取得可能、詳細までは取得できない)
'↓**********↓**********↓**********↓
Dim objShell As Object 'WshShell オブジェクト
Dim strResult As String '実行コマンド戻り値
Dim strCMD As String '実行コマンド

'BCP起動
strResult = ""
Set objShell = CreateObject("WScript.Shell")
strCMD = "bcp """ & strInitialCatalog & "." & strSchema & "." & strTable & """ in """ & strCSVFile & """ -t"","" -r""\n"" -c -S""" & strDataSource & """ -U""" & strUserID & """ -P""" & strPassword & """ "
strResult = objShell.Run(strCMD, 0, True) '0=非表示、True=BCPの終了を待つ

'エラーのとき
If strResult <> "0" Then
    'エラー時処理はここでは省略
End If
'↑**********↑**********↑**********↑

'(EXEC 実行結果詳細が取得できるが実行時にDOS窓が表示されてしまう、バッチ処理等でなら別にいいかも)
'↓**********↓**********↓**********↓
Dim objShell As Object ' WshShell オブジェクト
Dim objExecCmd As Object ' 実行コマンド情報
Dim strStdOut As String
Dim strCMD As String '実行コマンド

'BCP起動
Set objShell = CreateObject("WScript.Shell")
strCMD = "bcp """ & strInitialCatalog & "." & strSchema & "." & strTable & """ in """ & strCSVFile & """ -t"","" -r""\n"" -c -S""" & strDataSource & """ -U""" & strUserID & """ -P""" & strPassword & """ "
Set objExecCmd = objShell.exec(strCMD)

Do While objExecCmd.Status = 0
    DoEvents
    '0.5秒待つ
    Sleep (500)
    strStdOut = objExecCmd.StdOut.ReadAll 'これがないと完了しない
Loop

'エラーのとき
If objExecCmd.ExitCode <> "0" Then
    'エラー時処理はここでは省略、strStdOutに実行結果の詳細が格納されている
End If
'↑**********↑**********↑**********↑



Copyright (C) 2009- station-t.com All Rights Reserved , Link Free