다음을 통해 공유


DB-Library에서 ODBC 대량 복사로 변환

SQL Server Native Client ODBC 드라이버에서 지원하는 대량 복사 함수는 DB-Library 대량 복사 함수와 유사하므로 DB-Library 대량 복사 프로그램을 ODBC로 쉽게 변환할 수 있습니다. 단, 이 두 함수는 다음과 같은 차이점이 있습니다.

  • DB-Library 응용 프로그램은 DBPROCESS 구조에 대한 포인터를 대량 복사 함수의 첫 번째 매개 변수로 전달합니다. ODBC 응용 프로그램에서는 DBPROCESS 포인터가 ODBC 연결 핸들로 대체됩니다.

  • DB-Library 응용 프로그램은 연결하기 전에 BCP_SETL을 호출하여 DBPROCESS에서 대량 복사 작업을 사용하도록 설정합니다. 대신 ODBC 응용 프로그램은 다음과 같이 연결하기 전에 SQLSetConnectAttr을 호출하여 연결 핸들에서 대량 복사 작업을 사용하도록 설정합니다.

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);
    
  • SQL Server Native Client ODBC 드라이버에서는 DB-Library 메시지 및 오류 처리기를 지원하지 않습니다. ODBC 대량 복사 함수에서 발생한 오류 및 메시지를 보려면 SQLGetDiagRec를 호출해야 합니다. ODBC 버전의 대량 복사 함수는 SQL_SUCCESS 또는 SQL_ERROR와 같은 ODBC 스타일 반환 코드가 아니라 표준 대량 복사 반환 코드인 SUCCEED 또는 FAILED를 반환합니다.

  • DB-Library bcp_bindvarlen 매개 변수에 지정된 값은 ODBC bcp_bindcbData 매개 변수의 값과 다르게 해석됩니다.

    나타내는 조건

    DB-Library varlen

    ODBC cbData

    Null 값 제공

    0

    -1(SQL_NULL_DATA)

    변수 데이터 제공

    -1

    -10(SQL_VARLEN_DATA)

    길이가 0인 문자 또는 이진 문자열

    해당 사항 없음

    0

    DB-Library에서 varlen 값 -1은 가변 길이 데이터가 제공된다는 것을 나타내는 반면 ODBC cbData에서는 NULL 값만 제공된다는 의미로 해석됩니다. DB-Library varlen 사양 -1은 모두 SQL_VARLEN_DATA로 변경하고 varlen 사양 0은 모두 SQL_NULL_DATA로 변경하십시오.

  • DB-Library bcp_colfmtfile_collen 및 ODBC bcp_colfmtcbUserData에는 위에 설명한 bcp_bindvarlencbData 매개 변수와 같은 문제가 있습니다. DB-Library file_collen 사양 -1은 모두 SQL_VARLEN_DATA로 변경하고 file_collen 사양 0은 모두 SQL_NULL_DATA로 변경하십시오.

  • ODBC bcp_control 함수의 iValue 매개 변수는 void 포인터입니다. DB-Library에서 iValue는 정수였습니다. ODBC iValue의 값을 void에 캐스팅하십시오*.

  • bcp_control 옵션 BCPMAXERRS는 개별 행에 얼마나 많은 오류가 있어야 대량 복사 작업이 실패하는지를 지정합니다. BCPMAXERRS의 기본값은 DB-Library 버전 bcp_control에서는 0(첫 번째 오류에서 실패)이고 ODBC 버전에서는 10입니다. 대량 복사 작업을 종료하기 위해 기본값이 0이어야 하는 DB-Library 응용 프로그램은 ODBC bcp_control을 호출하여 BCPMAXERRS를 0으로 설정하도록 변경해야 합니다.

  • ODBC bcp_control 함수는 DB-Library 버전 bcp_control에서 지원되지 않는 다음과 같은 옵션을 지원합니다.

    • BCPODBC

      TRUE로 설정하면 문자 형식으로 저장한 datetimesmalldatetime 값에 ODBC 타임스탬프 이스케이프 시퀀스 접두사 및 접미사가 붙도록 지정합니다. 이 옵션은 BCP_OUT 작업에만 적용됩니다.

      BCPODBC를 FALSE로 설정하면 문자열로 변환된 datetime 값이 다음으로 출력됩니다.

      1997-01-01 00:00:00.000
      

      BCPODBC를 TRUE로 설정하면 같은 datetime 값이 다음으로 출력됩니다.

      {ts '1997-01-01 00:00:00.000' }
      
    • BCPKEEPIDENTITY

      TRUE로 설정하면 대량 복사 함수에서 제공된 데이터 값을 ID 제약 조건이 있는 열에 삽입하도록 지정합니다. 설정되지 않은 경우 삽입된 행에 대해 새 ID 값이 생성됩니다.

    • BCPHINTS

      다양한 대량 복사 최적화를 지정합니다. 이 옵션은 SQL Server 6.5 이하 버전에서 사용할 수 없습니다.

    • BCPFILECP

      대량 복사 파일의 코드 페이지를 지정합니다.

    • BCPUNICODEFILE

      문자 모드 대량 복사 파일이 유니코드 파일이 되도록 지정합니다.

  • ODBC bcp_colfmt 함수에서는 ODBC SQLCHAR typedef와 충돌하는 SQLCHAR의 file_type 표시를 지원하지 않습니다. bcp_colfmt에는 대신 SQLCHARACTER를 사용하십시오.

  • ODBC 버전의 대량 복사 함수에서 문자열의 datetimesmalldatetime 값을 사용하기 위한 형식은 ODBC 형식 yyyy-mm-dd hh:mm:ss.sss이지만 smalldatetime 값에서는 ODBC 형식 yyyy-mm-dd hh:mm:ss를 사용합니다.

    DB-Library 버전의 대량 복사 함수에서는 여러 형식을 사용하는 문자열의 datetimesmalldatetime 값을 사용할 수 있습니다.

    • 기본 형식은 mmm dd yyyy hh:mmxx입니다. 여기서 xx는 AM 또는 PM입니다.

    • DB-Library dbconvert 함수에서는 임의의 형식의 datetimesmalldatetime 문자열을 지원합니다.

    • SQL Server 클라이언트 네트워크 유틸리티의 DB-Library 옵션 탭에서 국가별 설정 사용 상자를 선택하면 DB-Library 대량 복사 함수에서는 클라이언트 컴퓨터 레지스트리의 로캘 설정에 정의된 국가별 날짜 형식의 날짜도 사용할 수 있습니다.

    DB-Library 대량 복사 함수에서는 ODBC datetimesmalldatetime 형식을 사용할 수 없습니다.

    SQL_SOPT_SS_REGIONALIZE 문 특성을 SQL_RE_ON으로 설정하면 ODBC 대량 복사 함수에서는 클라이언트 컴퓨터 레지스트리의 로캘 설정에 정의된 국가별 날짜 형식의 날짜를 사용할 수 있습니다.

  • money 값을 문자 형식으로 출력할 때 ODBC 대량 복사 함수에서는 4자리의 전체 자릿수를 제공하고 쉼표 구분 기호는 제공하지 않는 반면 DB-Library 버전에서는 2자리의 전체 자릿수만 제공하고 쉼표 구분 기호를 포함합니다.