완료시 SQLBulkCopy 행 개수

sqlbulkcopy sql-server

문제

SQLBulkCopy를 사용하여 많은 양의 데이터를 이동합니다. 특정 수의 행을 처리 할 때마다 알림 이벤트를 구현했지만 작업 완료시 OnSqlRowsCopied 이벤트가 실행되지 않습니다. SQLBulkCopy writetoserver가 완료 될 때 복사되는 총 행 수는 어떻게 얻습니까?

수락 된 답변

난 당신이 MSDN의 예에서와 같이이 끝나면 테이블에 COUNT () 쿼리를 실행한다고 생각 여기 .

그 외에는 말하지 마? 예를 들어 DataTable을 WriteToServer ()에 전달하는 경우 .Rows.Count를 수행하여 레코드 수를 알 수 있습니다.


인기 답변

다음과 같은 해킹 (리플렉션 사용) 옵션이 있습니다.

    /// <summary>
    /// Helper class to process the SqlBulkCopy class
    /// </summary>
    static class SqlBulkCopyHelper
    {
        static FieldInfo rowsCopiedField = null;

        /// <summary>
        /// Gets the rows copied from the specified SqlBulkCopy object
        /// </summary>
        /// <param name="bulkCopy">The bulk copy.</param>
        /// <returns></returns>
        public static int GetRowsCopied(SqlBulkCopy bulkCopy)
        {
            if (rowsCopiedField == null)
            {
                rowsCopiedField = typeof(SqlBulkCopy).GetField("_rowsCopied", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
            }

            return (int)rowsCopiedField.GetValue(bulkCopy);
        }
    }

그런 다음 다음과 같이 클래스를 사용하십시오.

int rowsCopied = SqlBulkCopyHelper.GetRowsCopied(bulkCopyObjectInYourCode);

희망이 도움이됩니다.



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