Udostępnij za pośrednictwem


Kopiowanie z programu zmiennych luzem

Możesz kopiowanie masowe bezpośrednio z programu zmiennych.Po rozdzieleniu zmiennych do przechowywania danych dla wiersza i telefonicznej bcp_init uruchomić kopiowanie masowe, call bcp_bind dla każdej kolumna określić lokalizację i format zmiennej program ma być skojarzony z kolumna.Wypełnienia każdej zmiennej z danymi, a następnie wywołać bcp_sendrow wysłać jeden wiersz danych do serwera.Powtórzyć proces wypełniania zmiennych i wywoływania bcp_sendrow aż wszystkie wiersze zostały wysłane na serwer, następnie wywołać bcp_done , aby określić, że dana operacja jest zakończona.

The bcp_bindpData parameter contains the address of the variable being bound to the column.Dane dla każdej kolumna mogą być przechowywane w jednym z dwóch sposobów:

  • Przydzielić jedną zmienną do przechowywania danych.

  • Przydzielić zmienna wskaźnikowa natychmiast następuje zmienna danych.

Zmienna wskaźnikowa wskazuje długość danych o zmiennej długości kolumn i wskazuje także wartości NULL, jeśli kolumna dozwolone są wartości null.If only a data variable is used, then the address of this variable is stored in the bcp_bindpData parameter.If an indicator variable is used, the address of the indicator variable is stored in the bcp_bindpData parameter.The bulk copy functions calculate the location of the data variable by adding the bcp_bindcbIndicator and pData parameters.

bcp_bind obsługuje trzy metody danych o zmiennej długości:

  • Użyj cbData z zmienną danych.Umieszczenie danych w cbData.Each time the length of the data to be bulk copied changes, call bcp_collento reset cbData.Jeśli jedną z dwóch metod jest używany, należy określić SQL_VARLEN_DATA dla cbData.Jeśli wartości danych dostarczany kolumna wartość NULL, określ SQL_NULL_DATA dla cbData.

  • Używać zmiennych wskaźnika.W każdej nowej wartości danych zostanie przeniesiona do zmiennej danych, długość wartości są przechowywane w zmiennej wskaźnika.Jeśli jedną z dwóch metod jest używany, należy określić 0 dla cbIndicator.

  • Za pomocą wskaźników terminator.Load the bcp_bindpTerm parameter with the address of the bit pattern that terminates the data.Jeśli jedną z dwóch metod jest używany, należy określić wartość NULL dla pTerm.

Wszystkie trzy metody te mogą być używane na tym samym bcp_bind wywołania, w którym to przypadek specyfikacji, wyniki w najmniejszej ilości danych używany jest kopiowane.

The bcp_bindtype parameter uses DB-Library data type identifiers, not ODBC data type identifiers.Identyfikatory typu danych biblioteki DB są zdefiniowane w sqlncli.h do użytku z ODBC bcp_bind funkcja.

Funkcji kopiowania luzem nie obsługują wszystkie typy danych ODBC C.Na przykład kopiowanie masowe funkcje nie obsługują struktury ODBC SQL_C_TYPE_TIMESTAMP, należy więc pisać Procedura SQLBindCol lub Procedura SQLGetData do konwertowania danych ODBC SQL_TYPE_TIMESTAMP do zmiennej SQL_C_CHAR.If you then use bcp_bind with a type parameter of SQLCHARACTER to bind the variable to a SQL Server datetime column, the bulk copy functions convert the timestamp escape clause in the character variable to the proper datetime format.

W poniższej tabela wymieniono typy danych zalecanych w mapowanie danych ODBC SQL typu SQL Server typu danych.

Typ ODBC SQLdata

Typ danych ODBC C

bcp_bind typu parametr

Typ danych programu SQL Server

SQL_CHAR

SQL_C_CHAR

SQLCHARACTER

znak

CHAR

SQL_VARCHAR

SQL_C_CHAR

SQLCHARACTER

varchar

zróżnicowanie znaków

CHAR różnicowania

Sysname

SQL_LONGVARCHAR

SQL_C_CHAR

SQLCHARACTER

tekst

SQL_WCHAR

SQL_C_WCHAR

SQLNCHAR

nchar

SQL_WVARCHAR

SQL_C_WCHAR

SQLNVARCHAR

nvarchar

SQL_WLONGVARCHAR

SQL_C_WCHAR

SQLNTEXT

ntext

SQL_DECIMAL

SQL_C_CHAR

SQLCHARACTER

dziesiętny

gru

pieniądze

Smallmoney

SQL_NUMERIC

SQL_C_NUMERIC

SQLNUMERICN

numeryczne

SQL_BIT

SQL_C_BIT

SQLBIT

bit

SQL_TINYINT (podpisane)

SQL_C_SSHORT

SQLINT2

smallint

SQL_TINYINT (bez znaku)

SQL_C_UTINYINT

SQLINT1

tinyint

SQL_SMALL_INT (podpisane)

SQL_C_SSHORT

SQLINT2

smallint

SQL_SMALL_INT (bez znaku)

SQL_C_SLONG

SQLINT4

int

integer

SQL_INTEGER (podpisane)

SQL_C_SLONG

SQLINT4

int

integer

SQL_INTEGER (bez znaku)

SQL_C_CHAR

SQLCHARACTER

dziesiętny

gru

SQL_BIGINT (podpisane i niepodpisane)

SQL_C_CHAR

SQLCHARACTER

bigint

SQL_REAL

SQL_C_FLOAT

SQLFLT4

rzeczywiste

SQL_FLOAT

SQL_C_DOUBLE

SQLFLT8

Pływak

SQL_DOUBLE

SQL_C_DOUBLE

SQLFLT8

Pływak

SQL_BINARY

SQL_C_BINARY

SQLBINARY

binarny

Sygnatura czasowa

SQL_VARBINARY

SQL_C_BINARY

SQLBINARY

varbinary

zróżnicowanie binarne

SQL_LONGVARBINARY

SQL_C_BINARY

SQLBINARY

obraz

SQL_TYPE_DATE

SQL_C_CHAR

SQLCHARACTER

data_i_godzina

smalldatetime

SQL_TYPE_TIME

SQL_C_CHAR

SQLCHARACTER

data_i_godzina

smalldatetime

SQL_TYPE_TIMESTAMP

SQL_C_CHAR

SQLCHARACTER

data_i_godzina

smalldatetime

SQL_GUID

SQL_C_GUID

SQLUNIQUEID

Uniqueidentifier

SQL_INTERVAL_

SQL_C_CHAR

SQLCHARACTER

CHAR

SQL Servernie podpisały tinyint, bez znaku smallint, lub bez int typów danych.Aby zapobiec utracie danych, podczas migracji tych typów danych, Utwórz SQL Server tabela z następnego największą całkowitą danych typu.Aby uniemożliwić użytkownikom dodawanie później wartości spoza zakresu dozwolone przez typ danych źródłowych, zastosować regułę do SQL Server kolumna, aby ograniczyć dopuszczalne wartości do zakresu obsługiwanych przez typ danych w oryginale źródło:

CREATE TABLE Sample_Ints(STinyIntCol   SMALLINT,
USmallIntCol INT)
GO
CREATE RULE STinyInt_Rule
AS 
@range >= -128 AND @range <= 127
GO
CREATE RULE USmallInt_Rule
AS 
@range >= 0 AND @range <= 65535
GO
sp_bindrule STinyInt_Rule, 'Sample_Ints.STinyIntCol'
GO
sp_bindrule USmallInt_Rule, 'Sample_Ints.USmallIntCol'
GO

SQL Server nie obsługuje interwału typów danych bezpośrednio.Aplikacja może jednakże przechowywać sekwencje unikowe interwał jako ciągi znaków w SQL Server znak kolumna.Aplikacja może odczytywać je do późniejszego użytku, ale nie mogą być używane w Transact-SQL instrukcji.

kopiowanie masowe Funkcji można używać do szybkiego załadować dane SQL Server , została przeczytana ze źródło danych ODBC.Użyj Procedura SQLBindCol powiązać kolumn zestaw wyników do programu zmiennych, następnie użyj bcp_bind powiązać zmiennych tego samego programu, aby kopiowanie masowe operacji.Wywołanie SQLFetchScroll lub SQLFetch następnie pobiera wiersz danych ze źródło danych ODBC do zmiennych programu i telefonicznej bcp_sendrow luzem kopiuje dane z programu zmiennych SQL Server .

An application can use the bcp_colptr function anytime it needs to change the address of the data variable originally specified in the bcp_bind pData parameter.An application can use the bcp_collen function anytime it needs to change the data length originally specified in the bcp_bindcbData parameter.

Nie można odczytać danych z SQL Server do zmiennych program za pomocą kopiowanie masowe; nie ma nic jak "bcp_readrow" Funkcja.Można wysyłać dane tylko z aplikacji na serwerze.