我正在使用C#Npgsql,并尝试使用COPY命令从Postgres导出数据。以下查询将返回100多行。我想使用while循环读取结果,就像使用NpgsqlDataReader一样。
当我尝试获取第二行结果(第二个StartRow())时,http://www.npgsql.org/doc/copy.html上的文档不断出现错误。 注意:运行第二个StartRow()会返回以下错误消息:
An unhandled exception of type 'Npgsql.NpgsqlException' occurred in mscorlib.dll
Additional information: Unknown message code: 0
using (NpgsqlBinaryExporter reader = conn.BeginBinaryExport("COPY tableName(colONE, colTWO) TO STDOUT (FORMAT BINARY)"))
{
reader.StartRow();
Console.WriteLine(reader.Read<string>());
Console.WriteLine(reader.Read<int>(NpgsqlDbType.Smallint));
reader.StartRow(); //### <== ERROR HERE ###
Console.WriteLine(reader.Read<string>());
Console.WriteLine(reader.Read<int>(NpgsqlDbType.Smallint));
}
如何读取WHILE循环中的 ALL 行或一次性输出?
答案 0 :(得分:1)
如果我正确理解了这个问题,这样的事情可能会有所帮助:
using (NpgsqlBinaryExporter reader = conn.BeginBinaryExport("COPY tableName(colONE, colTWO) TO STDOUT (FORMAT BINARY)"))
{
while(reader.StartRow() > 0)
{
Console.WriteLine(reader.Read<string>());
Console.WriteLine(reader.Read<int>(NpgsqlDbType.Smallint));
}
}
这应该读取表中的所有数据,它解决了我的类似问题。我仍然在寻找提高性能的方法,所以如果您有任何想法,请告诉我。