2014-07-10 2 views
0

다른 도메인의 검색 시스템에서 생성 된 정보가 포함 된 XML이 있습니다. XML은 다음과 같이 중첩 된 데이터베이스의 테이블에 해당C#에서 SQL Server에 조각난 XML 대량로드

Domains 
    Computers 
     Volumes 
      Folders 
       Files 

내 목표는 해당 테이블에 XML을로드하는 것입니다. 하나의 XML 파일이 너무 커서 데이터베이스에로드 할 수 없기 때문에 더 작은 파일로 압축해야합니다. 업 로더가 하나의 파일이 마지막 파일의 연속이고 이미 추가 된 상위 노드에 대한 추가 키를 생성하지 않도록 XML의 형식을 지정하는 방법은 무엇입니까? 어떤 신체가 이것을하는 경험이 있습니까? 이것이 업로드하는 가장 빠른 방법입니까? 많은 감사!

 static void BulkLoadXML() 
    { 
     try 
     { 
      string sPath = @"C:\XMLFiles\"; 


      string FileName, xsdPath, xmlPath; 
      FileName = "TestAuto"; 

      xmlPath = sPath + FileName + ".xml"; 
      xsdPath = sPath + FileName + ".xsd"; 

      SQLXMLBULKLOADLib.SQLXMLBulkLoad4 objBL = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4(); 

      objBL.ConnectionString = @"Provider=sqloledb; server=srv1;database=MyTest;User ID=sa;Password=psw;Connection Timeout=60"; 

      objBL.ErrorLogFile = "error.xml"; 
      objBL.KeepIdentity = false; 

      objBL.Execute(xsdPath, xmlPath); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.ToString()); 
      Console.Read(); 
     } 
     Console.Read(); 
    } 

답변

1

http://blogs.msdn.com/b/nikhilsi/archive/2008/06/11/bulk-insert-into-sql-from-c-app.aspx이 부분적으로 문제를 해결할 생각입니다 테이블에 대한 고유 색인이며 IGNORE_DUP_KEY를 ON으로 설정하십시오. 유일한 문제는 DB가 오류를 반환하고 자식 노드를 업로드하지 않는다는 것입니다. 결국 저장 프로 시저를 사용하여 주 테이블에 레코드를 보낸 후 하나씩 XML 청크에 의해로드 된 임시 테이블을 작성하기로 결정했습니다.

1

아마도 대량 삽입 여기 순서에 : 여기에 내가 XML을 업로드하는 데 사용하는 코드는? C#에서는 텍스트 파일에 먼저 쓸 필요가 없다고 생각합니다. XMLReader를 사용하여 XML을 메모리로 가져온 다음 대량 삽입하십시오. C#으로 대량 삽입에 대한 정보를 원하시면 다음 블로그 게시물을 읽어

http://rakeshbajania.wordpress.com/2011/01/01/prevent-duplicate-entry-when-using-sqlbulkcopy/

그래서 아이디어가 정의하는 것입니다 : 여기 연구의 AA를 많이했고,

+0

감사! 내가 사용하고있는 C/코드를 추가한다. 내가 텍스트 파일을 만들지 않았다고 언급했습니다. 그러나 XML 파일을 업로드해야합니다. – Nicole