Postgre COPY BeginBinaryExport While循环

时间:2017-04-06 05:24:47

标签: c# postgresql npgsql

我正在使用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 行或一次性输出?

1 个答案:

答案 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));
            }
        }

这应该读取表中的所有数据,它解决了我的类似问题。我仍然在寻找提高性能的方法,所以如果您有任何想法,请告诉我。