C#怎么实现数据导出CSV C#如何将数据库查询结果和集合数据导出为CSV格式文件【工具】

张开发
2026/4/10 4:14:07 15 分钟阅读

分享文章

C#怎么实现数据导出CSV C#如何将数据库查询结果和集合数据导出为CSV格式文件【工具】
用 StringBuilder 拼 CSV 最稳因其可精准控制字段转义双引号包裹、内部引号加倍、换行符保留在引号内、避免 StreamWriter.WriteLine 因原始字符串含特殊字符导致格式崩坏并支持流式处理与空值预处理。用 StringBuilder 拼 CSV 字符串最稳别用 StreamWriter 直接写原始字符串CSV 导出本质是文本拼接但直接用 StreamWriter.WriteLine 写字段容易崩——只要数据里有换行、逗号或双引号不加转义就破坏格式。用 StringBuilder 先组装每行再统一写入控制力更强也方便做空值/特殊字符预处理。常见错误现象System.ArgumentException: Illegal characters in path其实是字段含 被当成了多行Excel 打开后一列变三列字段含未包裹的逗号。每个字段必须用双引号包裹哪怕没逗号John Doe不是 John Doe字段本身含双引号得变成两个He said Hi.字段含换行符 或 必须保留在引号内不能提前换行避免用 string.Join 拼整行——它不处理引号转义得自己写封装逻辑数据库查询结果导出时优先用 SqlDataReader 流式读取别先 ToList()查几万行数据再转 ListT 再导出内存暴涨还可能 OOM。用 SqlDataReader 边读边写导出 100 万行也只占几 MB 常驻内存。使用场景SQL Server 查询结果导出、需要控制导出字段顺序、不想引入 ORM 映射开销。SqlDataReader 的 GetFieldType 和 GetValue 可直接取原始值避免类型转换损耗列名用 reader.GetName(i) 获取别硬编码字段名防止 SQL 别名变更导致 CSV 头错位如果字段是 DBNull.Value统一转成空字符串 不要留 NULL 文本别在循环里反复调用 reader.FieldCount提前提取到变量里导出集合对象ListT时用反射取属性要防空引用和只读属性用 typeof(T).GetProperties() 取字段导出很常见但遇到 get; private set;、init 属性或 null 对象时容易抛异常不是所有属性都可安全读。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章