>백엔드 개발 >C++ >C#에서 DataTable을 CSV 파일로 올바르게 변환하는 방법은 무엇입니까?

C#에서 DataTable을 CSV 파일로 올바르게 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-15 15:41:44458검색

How to Correctly Convert a DataTable to a CSV File in C#?

C#에서 DataTable을 CSV 파일로 효율적으로 변환

DataTable을 CSV 파일로 변환하는 작업은 데이터 처리에서 자주 사용되는 작업입니다. 그러나 잘못 처리하면 데이터가 손상되어 각 행의 첫 번째 셀 내에 값이 연결되는 경우가 많습니다. 이 가이드는 일반적인 함정을 피하는 올바른 접근 방식을 보여줍니다.

일반적인 오류 해결:

일반적인 실수는 각 행 끝에 추가 쉼표를 추가하여 데이터 정렬이 잘못되는 것입니다. 이 예에서는 해당 문제를 방지합니다.

최적 구현:

.NET 4.0 이상:

이 최적화된 코드 조각은 DataTable을 CSV 파일로 효율적으로 변환합니다.

<code class="language-csharp">StringBuilder sb = new StringBuilder();
sb.AppendLine(string.Join(",", dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName)));

foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
    sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText("test.csv", sb.ToString());</code>

특수 문자 처리(예: 필드 내 쉼표):

데이터 필드 내의 쉼표와 같은 특수 문자로 인한 데이터 손상을 방지하려면 다음 향상된 방법을 사용하세요.

<code class="language-csharp">foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field =>
      string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
    sb.AppendLine(string.Join(",", fields));
}</code>

이 코드는 각 필드를 큰따옴표로 묶고 필드 내의 기존 큰따옴표를 이스케이프합니다.

향상된 메모리 관리: 한 줄씩 쓰기:

매우 큰 DataTable의 경우 CSV를 한 줄씩 작성하면 메모리 효율성이 향상됩니다.

<code class="language-csharp">using (var writer = new StreamWriter("test.csv"))
{
    writer.WriteLine(string.Join(",", dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName)));
    foreach (DataRow row in dt.Rows)
    {
        writer.WriteLine(string.Join(",", row.ItemArray.Select(field => string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""))));
    }
}</code>

이 접근 방식은 전체 CSV를 메모리에 한 번에 로드하는 것을 방지하므로 대규모 데이터 세트를 처리하는 데 적합합니다. using, System.Data, System.IOSystem.Linq에 필요한 System.Text 문을 포함하는 것을 잊지 마세요.

위 내용은 C#에서 DataTable을 CSV 파일로 올바르게 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.