次の方法で共有


IBCPSession::BCPInit (OLE DB)

一括コピー構造を初期化し、エラー チェックを実行し、データファイル名とフォーマット ファイル名が正しいことを確認してから開きます。

構文

  
HRESULT BCPInit(   
const wchar_t *pwszTable,  
const wchar_t *pwszDataFile,  
const wchar_t *pwszErrorFile,  
inteDirection);  

注釈

BCPInit メソッドは、他の一括コピー メソッドの前に呼び出す必要があります。 BCPInit メソッドは、ワークステーションと SQL Server の間のデータの一括コピーに必要な初期化を実行します。

BCPInit メソッドは、データ ファイルではなく、データベース ソースまたはターゲット テーブルの構造を調べます。 データベース テーブル、ビュー、または SELECT 結果セットの各列に基づいて、データ ファイルのデータ形式の値を指定します。 この仕様には、各列のデータ型、データ内の長さまたは null インジケーターとターミネータバイト文字列の有無、固定長データ型の幅が含まれます。 BCPInit メソッドは、これらの値を次のように設定します。

  • 指定するデータ型は、データベース テーブル、ビュー、または SELECT 結果セット内の列のデータ型です。 データ型は、SQL Server Native Client ヘッダー ファイル (sqlncli.h) で指定された SQL Server ネイティブ データ型によって列挙されます。 これらの値は、BCP_TYPE_XXXのパターンにあります。 データは、そのコンピューター形式で表されます。 つまり、整数データ型の列からのデータは、データ ファイルを作成したコンピューターに基づくビッグ エンディアンまたはリトル エンディアンである 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 メソッドを使用します。

SQL Server への一括コピーは、データベース オプション の select into/bulkcopy を設定することで、インデックスを含まないテーブルに最適化できます。

論争

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

こちらもご覧ください

IBCPSession (OLE DB)
一括コピー操作の実行