C#에서 SQL Server 기본 파일을 만들 수 있습니까 (예 : BCP 기본 형식)

StackOverflow https://stackoverflow.com/questions/1810796

  •  05-07-2019
  •  | 
  •  

문제

15 년 된 코드베이스를 업그레이드하고 있으며 일부 기본 BCP 형식 데이터 파일을 만들어야합니다.

새 시스템에서는 C# DataTable 객체의 데이터를 사용하여 데이터 파일을 기본 BCP 형식으로 작성하는 것이 이상적입니다.

이 작업을 수행 할 수 있으며 그렇다면 최선의 접근 방식은 무엇입니까?

도움이 되었습니까?

해결책

아니요, 할 수 없습니다. 기본 BCP 파일을 만드는 유일한 방법은 SQL Server를 사용하는 것입니다. 누군가가 개발하거나 다른 방법을 찾으면 여기에 게시하십시오!

다른 팁

그것이 오래된 경우, BCP 조각은 Sybase BCP 조각처럼 보일 수 있습니다. Sybase에서는 클라이언트 라이 바리를보고 BCP API를 사용하여 코드의 예제를 배송했습니다. 해당 API에 대한 CTLIB 및/또는 Java 항아리. Microsoft의 경우 BCP와 관련된 기본 C 또는 기본 API의 비슷한 부분이있을 수 있습니다. API의 커뮤니케이션 부분이 필요하지 않을 수 있습니다. 레코드별로 단지 레코드를 준비하고 파일을 읽거나 읽습니다.

그러한 것이 없다면, 원래 BCP 프로그램에 의해 생성/소비 된 손으로 만든 FMT 파일 및 텍스트와 같은 데이터 파일로 비 원어식 형식을 고려합니다.

이를 수행하는 방법은 비슷하지만 SQLDMO를 참조해야하며 BCP와 같은 동등한 형식을 만듭니다. SQLDMO의 BulkCopy 객체를 사용하면 원하는대로 할 수 있습니다. 다음은 SQLDMO 라이브러리를 사용하는 vbscript에서 수행 된 루틴에 대한 링크입니다. 여기.

이것이 도움이되기를 바랍니다.

DataTable의 데이터를 SQL 서버의 스테이징 영역에 넣을 수 있습니까? 그렇다면 BCP 프로세스를 스폰 할 수 있습니다.

BCP : http://msdn.microsoft.com/en-us/library/aa174646%28sql.80%29.aspx

예를 들어, 나는 다음을 사용한다.

BCP Database.Schema.TableName OUT FileName.Ext -S ServerName -T -n

스위치 :

  • -S는 서버 용입니다
  • -T는 신뢰할 수있는 연결을위한 것입니다
  • -N은 기본 형식입니다

편집 + 새로운 아이디어 :

DataTable을 채우는 쿼리에 액세스 할 수있는 경우 BCP 또는 SQLDMO를 사용하여 기본 형식 파일을 내보낼 수 있습니다. 다음 쿼리는 인라인 쿼리가 포함되어 있기 때문에 아웃 스위치 대신 쿼리 아웃 스위치를 사용합니다.

보기에서 특정 열 내보내기 :

BCP "SELECT Column1, Column2 FROM MyViewName" QUERYOUT FileName.Ext -S ServerName -T -n

조인에서 특정 열을 내보내기 :

BCP "SELECT Table1.Column1, Table2.Column2 FROM Table1 INNER JOIN Table2 on Table1.Column33 = Table2.Column33" QUERYOUT FileName.Ext -S ServerName -T -n

대상 테이블의 열 유형 만 고정했다고 가정하면 무효가없고 유니 코드 문자열이 없으며 Endian-Inness를 기꺼이 처리한다고 가정하면 기본 파일 형식은 유형의 바이트입니다.

최근에 스테이징 파일 바이트 별 바이트를 작성하고 BCP를 사용하여 AC# 스크립트에서 수입 데이터를 대량으로 가져 왔습니다.

bcp destTable in model.raw -T -S _serverName -n

model.raw iscreated byte-wise by :

fileBytes = new byte[theLength * 4]; // * 4 bytes per element for int and float
var offset =0;

    foreach (var element in outputDimensions)
    {
        // fastCopy is a faster and "Unsafe" equivelent of BlockCopy , faster because it doesn't create an intermediate byte array.
        //Buffer.BlockCopy(BitConverter.GetBytes(profileid), 0, fileBytes, offset, 4);
        Utilities.fastCopy(profileid, fileBytes, offset);
        offset += 4;
        Utilities.fastCopy(element.index, fileBytes, offset);
        offset += 4;
        for (var i = 0; i < TimeSlices; i++, offset += 4)
        {
            float target = GetDataForTime(i,...);
            Utilities.fastCopy(target, fileBytes, offset); 
        }
    }

FileStream dataWriter.Write(fileBytes , 0, byteArray.Length);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top