首頁 > 後端開發 > C++ > 如何在 C# 中正確地將 DataTable 轉換為 CSV 檔案?

如何在 C# 中正確地將 DataTable 轉換為 CSV 檔案?

Barbara Streisand
發布: 2025-01-15 15:41:44
原創
452 人瀏覽過

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 一次載入到記憶體中,使其適合處理海量資料集。 記得為 usingSystem.DataSystem.IOSystem.Linq 加入必要的 System.Text 語句。

以上是如何在 C# 中正確地將 DataTable 轉換為 CSV 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板