SQL 대량 복사 클래스를 사용하여 루프에 데이터 삽입 #

c# sqlbulkcopy

문제

나는 두 개의 데이터베이스가 이제 하나의 DB에서 루프에 다른 DB에 데이터를 삽입해야합니다. 나는 비트 SQL 대량 복사 알고 SQL 대량 복사를 사용하여 한 번에 하나의 데이터를 삽입하는 방법을 모르겠다.

여기 내 테이블 구조가있다.

CREATE TABLE [CandidateApplication](
 [EmailID] [varchar](300) NOT NULL,
 [Name] [varchar](300) NULL,
 [FileName] [varchar](500) NULL,
 [IsDownloaded] [bit] NOT NULL
)

기본적으로 IsDownloaded=0 같은 절을 사용하여 하나의 데이터베이스에서 데이터를 가져올 IsDownloaded=0 및 루프에서 반복해야합니다. in 루프와 함께 FileName 필드에서 파일 경로를 가져 와서 해당 파일을 다운로드합니다. 파일을 성공적으로 다운로드 한 다음 해당 데이터를 db1에서 db2로 저장하고 IsDownloaded=1 을 db1로 업데이트해야합니다.

내가 데이터를 처리 할 수있는 하나의 DB에서 다른 db에 sqlbulk 복사 클래스를 사용하여 루프. 제발 제안 해주세요. 감사

수락 된 답변

하나씩 삽입하는 데이터를 반복 할 필요가 없기 때문에 컬렉션을 WriteToServer () 메서드에 전달하면됩니다.

예를 들면 다음과 같습니다.

HashSet<SomeObject> dataLines = new HashSet<SomeObject>(); 

foreach (var entity in someCollection)
        {
            if(entity == somecondition)
            {
                  dataLines.Add(new SomeObject
                              {
                                  CollectionItem1 = entity.Property1,
                                  CollectionItem2 = entity.Property2,
                                  CollectionItem3 = entity.Property3,
                                  CollectionItem4 = entity.Property4,
                                  CollectionItem5 = entity.Property5,
                                  CollectionItem6 = entity.Property6,
                                  CollectionItem7 = entity.Property7,
                              });
            }
        }
        try
        {
            _context.Connection.Open();
            EntityConnection connection = _context.Connection as EntityConnection;
            SqlConnection sqlConnection = null;
            if (connection != null)
            {
                sqlConnection = connection.StoreConnection as SqlConnection;
            }

            if (sqlConnection != null)
            {

                SqlBulkCopy bulkInsert = new SqlBulkCopy(sqlConnection);
                bulkInsert.DestinationTableName = "SomeTable";
                bulkInsert.ColumnMappings.Add("CollectionItem1", "Column1");
                bulkInsert.ColumnMappings.Add("CollectionItem2", "Column2");
                bulkInsert.ColumnMappings.Add("CollectionItem3", "Column3");
                bulkInsert.ColumnMappings.Add("CollectionItem4", "Column4");
                bulkInsert.ColumnMappings.Add("CollectionItem5", "Column5");
                bulkInsert.ColumnMappings.Add("CollectionItem6", "Column6");
                bulkInsert.ColumnMappings.Add("CollectionItem7", "Column7");
// dataLines is a collection of objects
                bulkInsert.WriteToServer(dataLines.AsDataReader());
                _context.SaveChanges();
            }
        }
        finally
        {
            _context.Connection.Close();
        }

인기 답변

그것은 간단합니다 :) 죄송합니다 VB.net에서 내 코드 나는 당신이 그것을 마음에 들지 않기를 바랍니다

참고 : 중요한 것은 데이터 테이블과 대상 테이블의 데이터 유형입니다. 그들은 같아야한다.

  1. db1에서 데이터를 가져 와서 원하는 작업을 수행하고 데이터 테이블에서 데이터를 준비하십시오.
  2. 이 함수를 사용하여 2 차 데이터베이스에 데이터 덤프

암호:

  Public Shared Function BulkSave(ByVal dt As DataTable) As Boolean
    Dim mydb As New CSdatabase
    Try

    Dim connectionString = "Connection String"
    '' so there is no need to map columns. 
        Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(connectionString)
            bulkCopy.BatchSize = 25000
            bulkCopy.BulkCopyTimeout = 300

            bulkCopy.ColumnMappings.Add("EmailID", "EmailID")
            bulkCopy.ColumnMappings.Add("Name", "Name")
            bulkCopy.ColumnMappings.Add("FileName", "FileName")
            bulkCopy.ColumnMappings.Add("IsDownloaded", "IsDownloaded")
            bulkCopy.DestinationTableName = "dbo.CandidateApplication"

            bulkCopy.WriteToServer(dt)
        End Using
    Catch ex As Exception
        Throw ex
    Finally
        'mydb.closeConnection() ' Close your conneciton here
    End Try

    Return True

End Function


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