Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellt eine Bindung zwischen Programmvariablen und SQL Server-Spalten.
Syntax
HRESULT BCPColFmt(
DBORDINALidxUserDataCol,
inteUserDataType,
intcbIndicator,
intcbUserData,
BYTE *pbUserDataTerm,
intcbUserDataTerm,
DBORDINALidxServerCol);
Bemerkungen
Die BCPColFmt-Methode wird verwendet, um eine Bindung zwischen BCP-Datendateifeldern und SQL Server-Spalten zu erstellen. Sie nimmt die Länge, den Typ, den Terminator und die Präfixlänge einer Spalte als Parameter an und legt jede dieser Eigenschaften für einzelne Felder fest.
Wenn der Benutzer den interaktiven Modus auswäht, wird diese Methode zweimal aufgerufen. einmal, um das Spaltenformat entsprechend den Standardwerten (die dem Typ der Serverspalte entsprechen) festzulegen, und einmal, um das Format entsprechend dem Spaltentyp der Auswahl des Clients festzulegen, der im interaktiven Modus ausgewählt wurde, für jede Spalte.
In nicht interaktiven Modi wird sie nur einmal pro Spalte aufgerufen, um den Typ jeder Spalte auf Zeichen oder systemeigene Typen festzulegen und die Spalten- und Zeilenendzeichen festzulegen.
Mit der BCPColFmt-Methode können Sie das Benutzerdateiformat für Massenkopien angeben. Bei Massenkopien enthält ein Format die folgenden Teile:
Eine Zuordnung von Benutzerdateifeldern zu Datenbankspalten.
Der Datentyp jedes Benutzerdateifelds.
Die Länge des optionalen Indikators für jedes Feld.
Die maximale Datenlänge pro Benutzerdateifeld.
Die optionale endende Bytesequenz für jedes Feld.
Die Länge der optionalen Beendende Bytesequenz.
Jeder Aufruf von BCPColFmt gibt das Format für ein Benutzerdateifeld an. Um beispielsweise die Standardeinstellungen für drei Felder in einer Datendatei mit fünf Feldern zu ändern, rufen Sie zuerst auf BCPColumns(5), und rufen Sie dann BCPColFmt fünf mal auf, wobei drei dieser Aufrufe ihr benutzerdefiniertes Format festlegen. Legen Sie für die verbleibenden beiden Aufrufe eUserDataType auf BCP_TYPE_DEFAULT fest, und legen Sie cbIndicator, cbUserData und cbUserDataTerm auf 0, BCP_VARIABLE_LENGTH bzw. 0 fest. Dieses Verfahren kopiert alle fünf Spalten, drei mit ihrem angepassten Format und zwei mit dem Standardformat.
Hinweis
Die IBCPSession::BCPColumns-Methode muss vor aufrufen von BCPColFmt aufgerufen werden. Sie müssen BCPColFmt einmal für jede Spalte in der Benutzerdatei aufrufen. Wenn Sie BCPColFmt mehrmals für jede Benutzerdateispalte aufrufen, tritt ein Fehler auf.
Sie müssen nicht alle Daten in einer Benutzerdatei in eine SQL Server-Tabelle kopieren. Wenn Sie eine Spalte überspringen möchten, geben Sie das Format der Daten für die Spalteneinstellung des Parameters "idxServerCol" auf 0 an. Um ein Feld zu überspringen, benötigen Sie weiterhin alle Informationen, damit die Methode ordnungsgemäß funktioniert.
Anmerkung Die IBCPSession::BCPWriteFmt-Funktion kann verwendet werden, um die über BCPColFmt bereitgestellte Formatspezifikation beizubehalten.
Argumente
idxUserDataCol[in]
Index des Felds in der Datendatei des Benutzers.
eUserDataType[in]
Der Datentyp des Felds in der Datendatei des Benutzers. Die verfügbaren Datentypen sind in der SQL Server Native Client-Headerdatei (sqlncli.h) mit BCP_TYPE_XXX Format aufgeführt, z. B. BCP_TYPE_SQLINT4. Wenn der BCP_TYPE_DEFAULT Wert angegeben ist, versucht der Anbieter, denselben Typ wie der Tabellen- oder Ansichtsspaltentyp zu verwenden. Für Massenkopievorgänge aus SQL Server und in eine Datei, wenn das eUserDataType Argument BCP_TYPE_SQLDECIMAL oder BCP_TYPE_SQLNUMERIC ist:
Wenn die Quellspalte nicht dezimal oder numerisch ist, werden die Standardgenauigkeit und -skalierung verwendet.
Wenn die Quellspalte dezimal oder numerisch ist, werden die Genauigkeit und skalierung der Quellspalte verwendet.
cbIndicator[in]
Präfixlänge für das Feld. Der Standardwert ist BCP_PREFIX_DEFAULT. Die gültigen Längen für das Präfix sind 0, 1, 2, 4 und 8. Eine Präfixgröße von 8 wird am häufigsten verwendet, um anzugeben, dass das Feld geblockt ist. Dies wird zum effizienten Kopieren großer Werttypspalten verwendet.
cbUserData[in]
Die maximale Länge in Byte der Daten dieses Felds in der Benutzerdatei, nicht einschließlich der Länge eines Längenindikators oder Terminators.
Die Einstellung cbUserData auf BCP_LENGTH_NULL gibt an, dass alle Werte in den Datendateifeldern auf NULL festgelegt oder auf NULL festgelegt werden sollen. Die Einstellung cbUserData auf BCP_LENGTH_VARIABLE gibt an, dass das System die Länge der Daten für jedes Feld bestimmen soll. Bei einigen Feldern kann dies bedeuten, dass ein Längen-/NULL-Indikator generiert wird, um Daten einer Kopie aus SQL Server vorauszugehen, oder dass der Indikator in Daten in SQL Server kopiert wird.
Bei SQL Server-Zeichen- und Binärdatentypen cbUserData kann es sich um BCP_LENGTH_VARIABLE, BCP_LENGTH_NULL, 0 oder einen positiven Wert handeln. Wenn cbUserData BCP_LENGTH_VARIABLE ist, verwendet das System entweder den Längenindikator, falls vorhanden, oder eine Terminatorsequenz, um die Länge der Daten zu bestimmen. Wenn sowohl ein Längenindikator als auch eine Terminatorsequenz bereitgestellt werden, verwendet die Massenkopie das Element, das zu der geringsten Datenmenge führt, die kopiert wird. Wenn cbUserData BCP_LENGTH_VARIABLE ist, handelt es sich beim Datentyp um ein SQL Server-Zeichen oder einen binären Typ, und wenn weder ein Längenindikator noch eine Terminatorsequenz angegeben wird, gibt das System eine Fehlermeldung zurück.
Wenn cbUserData 0 oder ein positiver Wert ist, verwendet cbUserData das System die maximale Datenlänge. Wenn jedoch zusätzlich zu einer positiven cbUserDataLängenanzeige oder Terminatorsequenz eine Längenanzeige oder Eine Terminatorsequenz bereitgestellt wird, bestimmt das System die Datenlänge mithilfe der Methode, die zu der geringsten Datenmenge führt, die kopiert wird.
Der cbUserData Wert stellt die Anzahl der Bytes von Daten dar. Wenn Zeichendaten durch Unicode-Breite zeichen dargestellt werden, stellt ein positiver cbUserData Parameterwert die Anzahl von Zeichen dar, die mit der Größe (in Byte) jedes Zeichens multipliziert werden.
pbUserDataTerm[size_is][in]
Die Terminatorsequenz, die für das Feld verwendet werden soll. Dieser Parameter ist hauptsächlich für Zeichendatentypen nützlich, da alle anderen Typen eine feste Länge aufweisen oder bei Binären Daten einen Indikator der Länge erfordern, um die Anzahl der vorhandenen Bytes genau aufzuzeichnen.
Um das Beenden extrahierter Daten zu vermeiden oder anzugeben, dass Daten in einer Benutzerdatei nicht beendet werden, legen Sie diesen Parameter auf NULL fest.
Wenn mehr als ein Mittel zum Angeben der Länge einer Benutzerdateispalte verwendet wird (z. B. ein Terminator und ein Längenindikator oder ein Terminator und eine maximale Spaltenlänge), wählt die Massenkopie das Element aus, das zu der geringsten Datenmenge führt, die kopiert wird.
Die Massenkopie-API führt bei Bedarf Unicode-zu-MBCS-Zeichenkonvertierung durch. Achten Sie darauf, dass sowohl die Zeichenfolge des Endatorbytes als auch die Länge der Bytezeichenfolge korrekt festgelegt sind.
cbUserDataTerm[in]
Die Länge der Terminatorsequenz in Bytes, die für die Spalte verwendet werden soll. Wenn in den Daten kein Terminator vorhanden oder gewünscht ist, legen Sie diesen Wert auf 0 fest.
idxServerCol[in]
Die Ordnungsposition der Spalte in der Datenbanktabelle. Die erste Spaltennummer ist 1. Die Ordnungsposition einer Spalte wird von IColumnsInfo::GetColumnInfo oder ähnlichen Methoden gemeldet. Wenn dieser Wert 0 ist, ignoriert die Massenkopie das Feld in der Datendatei.
Rückgabecodewerte
S_OK
Die Methode war erfolgreich.
E_FAIL
Ein anbieterspezifischer Fehler ist aufgetreten, um detaillierte Informationen über die ISQLServerErrorInfo-Schnittstelle zu erhalten.
E_UNEXPECTED
Der Aufruf der Methode war unerwartet. Die IBCPSession::BCPInit-Methode wurde beispielsweise vor dem Aufrufen dieser Methode nicht aufgerufen.
E_INVALIDARG
Das Argument war ungültig.
E_OUTOFMEMORY
Nicht genügend Arbeitsspeicherfehler.