2012-01-17 1 views
0

FileHelpers 라이브러리를 사용하여 CSV 파일을 SQL Server에 업로드하고 있습니다. 오류로 업로드 할 수없는 레코드 목록을 사용자에게 제시하고 싶습니다. SqlServerStorage 클래스의 ErrorMode를 SaveAndContinue로 설정했지만 레코드 중 하나가 foriegn 키 제약 조건을 위반하면 InsertRecords 메서드가 여전히 예외를 throw합니다. 이 오류를 저장하고 삽입을 계속하는 방법이 있습니까?FileHelpers 및 SQL Insert with SqlServerStorage 클래스 --- 오류 표시 방법

SqlServerStorage storage = new SqlServerStorage(typeof(RouteRecord),ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString); 
storage.ErrorManager.ErrorMode = FileHelpers.ErrorMode.SaveAndContinue; 
storage.InsertRecords((RouteRecord[])Session["successfulRecordArray"]); 

감사합니다.

+0

귀하가 갖고있는 코드는 어디에 있습니까 .. 우리는 귀하의 클래스가 어떻게 생겼는지 모르므로 필요한 코드 예제를 게시하십시오. 또한 Foreign Key Constraint는 일반적으로 동일한 값을 두 번 또는 여러 번 삽입하려고 시도하는 것을 의미합니다.이 값 중 하나만 삽입 할 수 있습니다. – MethodMan

+0

코드를 추가했습니다. 외부 키 예외는 마스터 테이블에 해당 레코드가없는 테이블에 레코드를 추가하려고 시도했기 때문에 발생합니다. – kav

+0

ok MasterDetail Relationship을 알지 못했습니다. RouteRecord가 무엇인지, 어디에서 선언했는지 ... typeof (RouteRecord)를 받고 있지만, Casting (RouteRecord [])을 삽입하면 Session [ 성공한 레코드 배열] ToArray() 실제 상황을 정의하는 방법을 알아야합니다. 여기에 형식 문제가있을 수 있습니다. – MethodMan

답변

0

FileHelpers 2.9.9의 코드를 살펴보면 SqlServerStorage의 기본 클래스 인 DatabaseStorage 클래스에 대해 FileHelpers error handling이 구현되지 않은 것으로 보입니다. 그 이유는 아마도 SQL 문이 성능상의 이유로 일괄 적으로 처리되므로 아마도 catch 개별 레코드의 오류 일 수는 없다고 생각합니다.

InsertRecords(Object[])를 재정 의하여 누락 된 오류 처리를 추가 너무 어렵지 않을 것이다, 그러나 당신은 당신의 코드에 여러 개의 클래스를 복사하는 데 끝날 것 때문에 불행하게도, SqlServerStoragesealed하고 도우미 루틴의 일부 internal 있습니다. (이렇게하는 경우 ExecuteInBatch을 false로 설정하여 각 SQL 문이 개별적으로 처리되도록하십시오. 이는 성능에 영향을 미칩니다).

InsertRecords() 호출 전에 호출 된 별도의 루틴에서 외래 키 위반에 대한 검사 (예 : RouteRecord[] 열거)를 구현할 수 있지만 다른 이유로 인해 발생하는 오류를 막지는 못합니다.