[SQL] 빠른 속도로 ADO.NET을위한 도서관은 .csv 파일에서 데이터베이스에 데이터를 삽입 일괄?
SQL빠른 속도로 ADO.NET을위한 도서관은 .csv 파일에서 데이터베이스에 데이터를 삽입 일괄?
난 당신이 데이터베이스 작업을위한 모든 고급 ADO.NET 라이브러리를 추천 할 수 있는지 알고 싶습니다.
내가 LINQ - 투 - 엔티티 것은 아니지만 데이터베이스에 데이터를 삽입하기위한 모든 유용한에서, 데이터베이스에서 데이터를 당기에 좋은 것을 발견했습니다. 그것의 실종 빠른 대량 삽입 등의 기능 중복의 도태, 당신은 순수한 SQL로 달성 할 수있는 고급 기능을 대부분.
그래서 : 당신은 LINQ - 투 - 엔티티가 누락되는 고급 기능의 종류를 제공하는 일부 ADO.NET 라이브러리를 추천 할 수 있습니까?
해결법
-
==============================
1.ADO.net SqlBulkCopy의 클래스는 테이블에 레코드를 빠르게 대량 업로드 할 수 있습니다 :
ADO.net SqlBulkCopy의 클래스는 테이블에 레코드를 빠르게 대량 업로드 할 수 있습니다 :
DataTable dt = s_EmptyUploadTable.Copy(); foreach (var itm in yourList) { DataRow row = dt.NewRow(); row["Field1"] = itm.Field1; row["Field2"] = itm.Field2; dt.Rows.Add(row); } using (SqlConnection cn = new SqlConnection(yourConnectionString)) { cn.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(cn)) { bulkCopy.DestinationTableName = "dbo.YourActualSQLServerTableName"; bulkCopy.WriteToServer(dt); } cn.Close(); }
-
==============================
2.당신은 무대 뒤에서 SQL 대량 복사를 사용하여 데이터베이스를 IEnumerable 목록을 작성하는 LINQ 엔터티 데이터 판독기를 사용할 수 있습니다. LINQ 쿼리의 결과는 IEnumerable이기 때문에 당신은 대량이 라이브러리가 바로 데이터베이스로 LINQ 쿼리의 결과를 업로드 할 수 있습니다.
당신은 무대 뒤에서 SQL 대량 복사를 사용하여 데이터베이스를 IEnumerable 목록을 작성하는 LINQ 엔터티 데이터 판독기를 사용할 수 있습니다. LINQ 쿼리의 결과는 IEnumerable이기 때문에 당신은 대량이 라이브러리가 바로 데이터베이스로 LINQ 쿼리의 결과를 업로드 할 수 있습니다.
LINQ - 투 - 모든 어댑터가, 당신은 LINQ 쿼리를 사용하여 .csv 파일에서 데이터를 잡기 위해 사용하는 같은 트릭을 CSV 라이브러리에 LINQ를 할 수있는, 벌크 쓰기에 다음 LINQ 엔터티 데이터 판독기이 데이터를 직접에 데이터 베이스.
사례 연구 :
문제 : 데이터베이스에 신속하게 .csv 파일을 읽습니다. SQL 데이터베이스에 대한 연결이 LINQ - - Entitys에 C에서 #를 통해입니다.
해결 방법 1 : CSV 라이브러리를 사용하여 LINQ는 다음 표준 LINQ - 투 - 엔티티 호출 (ctx.AddObject (), ctx.SaveChanges () 등)를 사용하여 그것을 쓰기, 원하는 데이터를 꺼내하는 LINQ 쿼리를 구축합니다. 시간 촬영 : 30 초 만 개 기록을 위해, LINQ는 모든 단일 레코드에 대한 쿼리를 생성 끝으로 (slooooow을 !!!!!).
해결 방법 2 : CSV 라이브러리를 사용하여 LINQ는 대상 데이터 테이블에이 데이터를 직접 대량 쓰기에 IEnumerable을 사용 LINQ 엔터티 데이터 리더로 원하는 데이터를 꺼내하는 LINQ 쿼리를 구축합니다. 시간 촬영 : 3 초 만 개 기록을 위해.
해결 방법 3 : 사용하여 SQL "대량 복사"에 저장 프로 시저. 시간 촬영 : 2 초 만 개 기록을 위해. 이 저장 프로 시저에 의존하고, SQL의 대량 복사가 좀 .csv 파일 형식과 호환되지 않습니다 그러나,이 솔루션은 매우 취성이다. 이 방법은 당신이 파일 포맷 문제 및 정상화에 도움을 처리하는 실제 목표 테이블과 .csv 파일 사이에 스테이징 테이블을 사용해야합니다.
그리고, 여기에 솔루션 # 2에 대한 소스 코드는 다음과 같습니다
static void WriteCSVtoSQLtable() { // Step 1: Read .csv file into IEnumerable using LINQ-to-CSV class. // This section requires "LINQtoCSV" class as described at http://www.codeproject.com/KB/linq/LINQtoCSV.asp string inputFilePath = @"T:\x.csv"; CsvFileDescription inputFileDescription = new CsvFileDescription { SeparatorChar = ',', FirstLineHasColumnNames = true }; IEnumerable<MyCustomColumnMappingClass> csvChains = cc.Read<MyCustomColumnMappingClass>(inputFilePath, inputFileDescription); // Step 2: Now write into the target table on SQL Server. // This section requires "EntityDataReader" class described at http://archive.msdn.microsoft.com/LinqEntityDataReader. public static string dbSqlConnectionString = @";Data Source=(local);Initial Catalog=PhiEngine;Integrated Security=True;MultipleActiveResultSets=True"; SqlConnection dbSql(dbSqlConnectionString); using (var tran = dbSql.BeginTransaction()) { var csvFile = from p in csvChains select p; SqlBulkCopy bc = new SqlBulkCopy(dbSql, SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.KeepNulls, tran) { BatchSize = 1000, DestinationTableName = "TStagingTable" // Temporary staging table in database. }; bc.WriteToServer(csvFile.AsDataReader()); // Extension method .AsDataReader depends on adding the EntityDataReader class to your C# project (see above). tran.Commit(); } } // This class is used by LINQ to CSV to query the .csv file, see "LINQtoCSV" website. public class MyCustomColumnMappingClass { [CsvColumn(Name = "symbol", FieldIndex = 1)] public string Symbol { get; set; } [CsvColumn(Name = "date", FieldIndex = 3, OutputFormat = @"MM/dd/yyyy")] public DateTime Date { get; set; } }
from https://stackoverflow.com/questions/5052958/libraries-for-ado-net-to-rapidly-bulk-insert-data-into-a-database-from-a-csv-fi by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 클러스터 인덱스 - 인덱스 질문의 순서 (0) | 2020.06.30 |
---|---|
[SQL] NodeJS와 MSSQL 패키지 오류가있는 저장 프로 시저를 실행 (0) | 2020.06.30 |
[SQL] 자동 증가는 자동 증가 필드없이 데이터베이스에 필드 (0) | 2020.06.30 |
[SQL] 불꽃의 그룹과 시간 창을 압연을 통해 집계하는 방법 (0) | 2020.06.30 |
[SQL] 요일과 같은 형식의 날짜 (0) | 2020.06.30 |