IBCPSession::BCPInit (OLE DB)
一括コピー構造を初期化し、エラー チェックを実行して、データ ファイルとフォーマット ファイルの名前が正しいことを確認します。その後、それらのファイルを開きます。
構文
HRESULT BCPInit(
const wchar_t *pwszTable,
const wchar_t *pwszDataFile,
const wchar_t *pwszErrorFile,
int eDirection);
解説
BCPInit メソッドは、他のすべての一括コピー メソッドの前に呼び出す必要があります。BCPInit メソッドにより、ワークステーションと SQL Server との間のデータの一括コピーに必要な初期化が実行されます。
BCPInit メソッドは、データ ファイルではなく、データベースのコピー元テーブルまたはコピー先テーブルの構造を調べます。また、データベース テーブル、ビュー、または SELECT 結果セット内の各列に基づいてデータ ファイルのデータ形式値を指定します。このデータ形式値には、各列のデータ型、長さや NULL のインジケータとターミネータのバイト文字列がデータ内に存在するかどうか、および固定長データ型の幅の指定などが含まれます。BCPInit メソッドでは、これらの値を次のように設定します。
- 指定するデータ型は、データベース テーブル、ビュー、または SELECT 結果セット内の列のデータ型です。データ型は、SQL Native Client ヘッダー ファイル (sqlncli.h) に指定されている SQL Server ネイティブ データ型によって列挙されます。列挙される値の形式は、BCP_TYPE_XXX です。データはそのコンピュータの形式で表されます。つまり、integer データ型の列のデータは、データ ファイルを作成したコンピュータに基づいて、ビッグ エンディアンまたはリトル エンディアンの 4 バイト シーケンスで表されます。
- データベースのデータ型が固定長の場合は、データ ファイルのデータも固定長になります。データを処理する一括コピー メソッド (IBCPSession::BCPExec など) では、データ行が解析されます。データ ファイル内のデータの長さは、データベース テーブル、ビュー、または SELECT 列リスト内で指定されるデータの長さと同じでなければなりません。たとえば、
char(13)
で定義されているデータベース列のデータは、ファイル内の各データ行に 13 文字で表す必要があります。データベース列で NULL 値を許容する場合は、固定長データにプレフィックスとして NULL インジケータを付けることができます。 - データを SQL Server にコピーするときは、データ ファイルにデータベース テーブル内の各列に格納するデータが含まれている必要があります。データを SQL Server からコピーするときは、データベース テーブル、ビュー、または SELECT 結果セット内のすべての列のデータがデータ ファイルにコピーされます。
- データを SQL Server にコピーするときは、データ ファイル内の列の序数位置がデータベース テーブル内の列の序数位置と同じであることが必要です。データを SQL Server からコピーするときは、BCPExec メソッドによりデータベース テーブル内の列の序数位置に基づいてデータが配置されます。
- データベースのデータ型が可変長 (
varbinary(22)
など) の場合、またはデータベース列に NULL 値を格納できる場合は、データ ファイル内のデータにプレフィックスとして長さのインジケータや NULL インジケータを付けることができます。インジケータの幅は、データ型と一括コピーのバージョンによって異なります。IBCPSession::BCPControl メソッドのオプションである BCP_OPTION_FILEFMT では、データ内のインジケータの幅が必要な幅より狭くなる時点を示すことで、以前の一括コピー データ ファイルと最新バージョンの SQL Server を実行しているサーバーとの間の互換性を確保しています。
メモ : |
---|
データ ファイルに指定したデータ形式値を変更するには、IBCPSession::BCPColumns メソッドと IBCPSession::BCPColFmt メソッドを使用します。 |
テーブルにインデックスが含まれていない場合は、データベース オプション select into/bulkcopy を設定することにより、SQL Server への一括コピーを最適化できます。
引数
pwszTable[in]
コピー操作の対象になるデータベース テーブルの名前を指定します。名前には、データベース名や所有者名を含めることができます。たとえば、"pubs.username.titles"、"pubs..titles"、"username.titles" のように指定できます。eDirection 引数を BCP_DIRECTION_OUT に設定すると、pwszTable 引数をデータベース ビューの名前にすることができます。
eDirection 引数を BCP_DIRECTION_OUT に設定し、BCPExec メソッドを呼び出す前に BCPControl メソッドを使用して SELECT ステートメントを指定する場合は、pwszTable 引数に NULL を設定する必要があります。
- pwszDataFile[in]
コピー操作の対象になるユーザー ファイルの名前を指定します。
- pwszErrorFile[in]
進行状況メッセージ、エラー メッセージ、およびユーザー ファイルからテーブルにコピーできなかった行のコピーを格納するエラー ファイルの名前を指定します。pwszErrorFile 引数に NULL を設定すると、エラー ファイルが使用されません。
- eDirection[in]
コピー操作の方向として、BCP_DIRECTION_IN か BCP_DIRECTION _OUT のいずれかを設定します。BCP_DIRECTION _IN はユーザー ファイルからデータベース テーブルへのコピーを示します。BCP_DIRECTION _OUT はデータベース テーブルからユーザー ファイルへのコピーを示します。
リターン コード値
- S_OK
メソッドが成功しました。
- E_FAIL
プロバイダ固有のエラーが発生しました。エラーの詳細を確認するには、ISQLServerErrorInfo インターフェイスを使用してください。
- E_OUTOFMEMORY
メモリ不足エラーです。
- E_INVALIDARG
1 つ以上の引数が正しく指定されませんでした。たとえば、無効なファイル名が指定されました。