首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自CsvHelper的CsvHelper不导出小表

来自CsvHelper的CsvHelper不导出小表
EN

Stack Overflow用户
提问于 2016-07-14 22:01:09
回答 1查看 538关注 0票数 0

我使用CsvWriter从Server中的表导出数据,有两个问题:

  1. 当表很小时,即有几行(我测试了1行和5行),CsvWriter不会导出任何东西(空文件)。
  2. 当表有足够的行来触发导出时,它会截断行。在我的测试中,导出30行表时有21行,导出50行表时有44行(最后一行在这两种情况下都是不完整的)。

Server代码加载测试数据

代码语言:javascript
复制
DECLARE @cnt INT = 0;
DECLARE @rows INT = 1; /* I tested 5, 30 and 50 */

WHILE @cnt < @rows
BEGIN
  INSERT INTO csvtest(id, a, b) VALUES(NEWID(), @cnt, 'a very very1 very2 very3 very4 long random string');
  SET @cnt = @cnt + 1;
END;

用于导出数据的C#代码(或多或少是https://joshclose.github.io/CsvHelper/上代码的副本)

代码语言:javascript
复制
// open a database connection
SqlConnection con = new SqlConnection(cs);
con.Open();

string sqlstring = "SELECT * FROM csvTest";
SqlCommand cmd = new SqlCommand(sqlstring, con);
SqlDataReader dr = cmd.ExecuteReader();

var csv = new CsvWriter(new StreamWriter("c:\\tmp\\csvtest_1row.csv"));

while (dr.Read())
{
    for (var i = 0; i < dr.FieldCount; i++)
    {
            csv.WriteField(dr[i]);
    }
    csv.NextRecord();
}
con.Close();

我的CsvHelper版本是2.15.0.2。

二注:

  1. 我对代码进行了逐行调试,可以确认数据从数据库中正确读取。实际上,我查看了CSV对象,似乎数据就在那里。只是不知何故,它们没有正确地写入文件。
  2. 我的代码应该是通用的,可以导出任何表。

有人能告诉我我做错了什么吗?

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-07-14 22:48:19

必须显式或使用“使用{.}”关闭StreamWriter。否则,它将不会刷新缓冲区,因此文件的尾部将丢失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38384951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档