Dictionary 요소를 IDatareader 및 SqlBulkCopy를 사용하여 SQL 테이블에 행으로 삽입하십시오.

c# datareader dictionary sql sqlbulkcopy

문제

현재 이와 같은 프로세스의 실행 시간을 극적으로 개선해야합니다.

private Dictionary<int, SingleElement> elements_buffer;

// ... Create and load values into "elements_buffer"
// (string, Datetime, double)

string query = "INSERT INTO Tests.dbo.test_table "
    + "(element_name,element_init,element_width) VALUES";

SingleElement element_aux;

for (int i = 0; i < MAX_ELEMS_IN_DICT; i++)
{
    element_aux = elements_buffer[i];

    query = query
        + "('"
        + element_aux.name
        + "','"
        + element_aux.init
        + "',"
        + element_aux.width
        + ")";

    if (i < MAX_ELEMS_IN_DICT+1) {
        query = query + ",";
    }
}

// ... Execute the query

새로운 버전의 Datatable 을 사용할 예정 IDatareader , 다음과 같이 IDatareader 와 함께 SqlBulkCopy 를 사용하는 것에 대해 읽었습니다.

SqlBulkCopy 성능

C # 루프 및 매스 삽입

나에게 내 코드에 대한 더 나은 선택 인 것처럼 보이지만 코드를 사용하는 방법을 알아낼 수는 없지만 사용하고 싶습니다.

번역 된 코드에 대한 도움을받을 수 있습니까?

미리 감사드립니다.

수락 된 답변

이미 알아 냈으므로 사용자 정의 IDataReader 를 구현해야 합니다 . 소스가 사전이므로 int FieldCount, bool Read (), Get (int i) 등의 비교적 간단한 메서드 / 속성 만 구현해야합니다.

sqlbulkcopy 사용자 정의 idatareader 를 검색 하여 사용자 정의 IDataReader 구현의 유용한 예제 ( 간단한 예제)를 찾을 수 있습니다.

또한 SqlBulkCopy는 트리거, 외래 키 및 기타 제약 조건을 무시하며 예외를 처리 할 수 ​​없습니다.



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