Share via


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 Server 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 つ以上の引数が正しく指定されませんでした。たとえば、無効なファイル名が指定されました。

関連項目

概念

その他の技術情報