2014-07-17 2 views
0

로컬 .csv 파일 (약 6MB, 130k 행)을 삽입해야합니다. 나는 C# 프로그램에서 파일을 열 필요가 각 행, 특별한 고려 사항 (각 필드 주위에 따옴표) 각 행을 삽입해야합니다.콘솔 응용 프로그램을 사용하여 CSV에서 SQL Server로 대량 데이터 삽입

DB에 삽입 한 적이 없기 때문에 가장 좋은 방법은 궁금합니다. 나는 DB에서 아래에 직접적으로 해왔지만 지금은 C# app 내에서 이것을 할 필요가있다. .csv 파일에서

BULK 
INSERT CSVTest 
FROM 'c:\csvtest.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 

샘플 데이터는 아래에, 그리고 전 C#에서 DB에 삽입 할 때 따옴표를 제거하는 방법에 대한 약간의 손실입니다. C#에서 열 이름을 지정해야합니까, 아니면 T-SQL 쿼리와 비슷한 것을 삽입 할 수 있습니까?

Copyright (c) 2011 MaxMind Inc. All Rights Reserved. 
"beginIp","endIp","beginIpNum","endIpNum","countryCode","countryName" 
"1.0.0.0","1.0.0.255","16777216","16777471","AU","Australia" 
"1.0.1.0","1.0.3.255","16777472","16778239","CN","China" 
"1.0.4.0","1.0.7.255","16778240","16779263","AU","Australia" 

그리고 첫 번째 2 줄에 대해서는 2 개의 reader.ReadLine();을 (를) 무시해야한다는 것을 알고 있습니다. C# newb에 대한 도움은 언제나 환영합니다! 필드는 .csv 파일에서 완전히 동일하므로 문제가되지 않습니다. 그냥 csv를 통해 큰 csv에서 SQL로 데이터를 삽입하는 쉬운 방법이 있는지 모르겠다. 미리 감사드립니다!

편집 : TGH의 예를 들어 링크를 제공 아름답게 심지어 따옴표 내에서 .CSV 필드를 가져옵니다

내가 지금 사용하고 무엇

,. 이제 SQL 연결을 통해 삽입 만하면됩니다.

당신은하는 SqlCommand를 만들고 위에 정의 된 원시 SQL 문자열을 실행할 수 있습니다

using (TextFieldParser parser = new TextFieldParser(@"C:\StreamReadTest.csv")) 
     { 
      parser.SetDelimiters(new string[] { "," }); 
      parser.HasFieldsEnclosedInQuotes = true; 

      // Skip over header line. 
      parser.ReadLine(); 
      // Skip field descriptions line. 
      parser.ReadLine(); 

      while (!parser.EndOfData) 
      { 
       string[] fields = parser.ReadFields(); 

       foreach (var value in fields) 
       { 
        Console.WriteLine(value); 
       } 

       Console.WriteLine("\n"); 
       Console.ReadKey(); 
      } 
     } 
+0

OSQL 유틸리티를 사용하지 마십시오. – Darek

+0

@Darek OSQL에 대해 들어 본 적이 없지만 [이 페이지] (https://msdn.microsoft.com/en-us/library/ms162806.aspx)에 "이 기능은 향후 SQL 버전에서 제거 될 것입니다 서버. 새 개발 작업에서는이 기능을 사용하지 말고 현재이 기능을 사용하는 응용 프로그램을 수정하려면 sqlcmd를 사용하십시오. 자세한 내용은 [sqlcmd] (https://msdn.microsoft.com/en-us/library)를 참조하십시오./ms162773.aspx) 유틸리티. " – GlennFromIowa

답변

2

당신은 몇 가지 옵션이 있습니다. 또는 저장 프로 시저에서 SQL을 래핑하고 Ado.net을 사용하여 .Net에서 호출 할 수 있습니다.

다른 방법은 파일을 구문 분석하고 .Net (ado.Net 또는 Entity Framework와 같은 ORM)을 통해 개별 행을 저장하는 것입니다. 구문 분석을 위해 다음 라이브러리 (.net csv 파서에 내장 된)를 조사하는 것이 좋습니다. 파일 : http://coding.abel.nu/2012/06/built-in-net-csv-parser/

+0

도움 주셔서 감사합니다! 이 링크를 사용하면 필자가 필요로하는 두 가지 작업, 필드를 쉽게 따옴표로 묶는 방법, 내 .csv 파일의 두 줄을 건너 뛸 수 있습니다. 이것을 MSSQL DB에 삽입하는 것에 대한 지침이 있습니까? "beginIp", "endIp", "beginIpNum", "endIpNum", "countryCode", "countryName"같은 필드가 포함 된 테이블이 이미 만들어져 있습니다. 구문 분석 된 .csv 데이터를 사용하여 AC# db에 연결하고 삽입하지 않았습니다. 그래서 어떤 도움을 주셔서 감사합니다! 감사. – cpound

+0

몇 가지 다른 방법이 있습니다. 하나는 Entity 프레임 워크입니다 (http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net). -mvc-application), Ado.Net을 고려할 수도 있습니다. – TGH

관련 문제