텍스트 파일에서 MS SQL Server로 데이터를 가져 오는 가장 좋은 방법

performance sqlbulkcopy sql-server vb.net

문제

당신의 의견이 필요합니다. 현재 VB.NET에서 응용 프로그램을 개발 중입니다.

1000 개 이상의 행이 들어있는 텍스트 파일이 있습니다. 각 행에는 데이터베이스에 삽입해야하는 데이터가 들어 있습니다. 행의 샘플은 다음과 같습니다.

0001--------SCOMNET--------0.100---0.105

언뜻 보면 각 열이 탭으로 구분되었지만 실제로는 각 열이 공백으로 구분되었습니다 (공백을 표시하기 위해 텍스트 편집기를 사용할 수 없기 때문에 공백으로 표시하기 위해 '-'를 사용했습니다).

첫 번째 열은

Substring(0, 12) which is the data [0001--------]

두 번째 열

Substring(12, 12) in which the data is [SCOMNET-----] 

세 번째 열은

Substring(24, 8) in which the data is [---0.100] 

마지막 열은

Substring(32, 8) in which the data is [---0.105]

내 머리 글자는 텍스트 파일의 줄을 추출하고 문자열 목록으로 저장 한 다음 반복하면서 SubString () 함수를 사용하여 목록의 각 문자열 항목을 분리 한 후 목록의 끝. 그러나 이것은 의심의 여지가 시간이 걸릴 것입니다.

내 시나리오에서 SqlBulkCopy를 어떻게 활용할 수 있습니까? 아니면 더 빠른 삽입을 위해이 방법에 접근 할 수있는 다른 방법이 있습니까? 말하다;

  • 파일 열기
  • 루프를 시작하다
    • 행을 읽다
    • 줄의 각 열을 부분 문자열과 구분한다.
    • DataTable에 저장
  • 엔드 루프
  • BCP (DataTable)

인기 답변

여기에는 텍스트 파일을보다 효율적으로 읽을 수있는 방법이 포함됩니다.

    Sub readFixWidthTextFileIntoSqlTable()

    Dim sqlConn As New SqlConnection("Connection String Goes Here")
    sqlConn.Open()
    Dim sqlComm As New SqlCommand
    sqlComm.Connection = sqlConn
    sqlComm.CommandType = CommandType.Text
    sqlComm.CommandText = "INSERT INTO YourTableNameHere VALUES(@Field1, @Field2, @Field3, @Field4)"

    sqlComm.Parameters.Add("@Field1", SqlDbType.Text)
    sqlComm.Parameters.Add("@Field2", SqlDbType.Text)
    sqlComm.Parameters.Add("@Field3", SqlDbType.Text)
    sqlComm.Parameters.Add("@Field4", SqlDbType.Text)



    Using IFReader As New FileIO.TextFieldParser(FileNameWithPath)
        IFReader.TextFieldType = FileIO.FieldType.FixedWidth
        IFReader.SetFieldWidths(12, 12, 8, 8)

        While Not IFReader.EndOfData
            Dim fields As String() = IFReader.ReadFields

            sqlComm.Parameters("@Field1").Value = fields(0)
            sqlComm.Parameters("@Field2").Value = fields(1)
            sqlComm.Parameters("@Field3").Value = fields(2)
            sqlComm.Parameters("@Field4").Value = fields(3)
            sqlComm.ExecuteNonQuery()
        End While

    End Using

    sqlConn.Close()
End Sub


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.