c# - C#获取postgres表数据(CSV格式)

标签 c# postgresql

CSV 获取查询:

COPY (select * from a.table) TO STDOUT WITH CSV DELIMITER ';' HEADER

如何在 C# 中获取查询数据,当尝试使用 command.ExecuteReader() 时出现错误:

System.Exception: Received unexpected backend message CopyOutResponse. Please file a bug.

最佳答案

你总是可以暴力破解任务...

    private const string QUOTE = "\"";
    private const string ESCAPED_QUOTE = "\"\"";
    private static char[] CHARACTERS_THAT_MUST_BE_QUOTED = { ',', '"', '\n', '\r' };

    private static string Escape(string s)
    {
        if (string.IsNullOrEmpty(s))
            return string.Empty;

        if (s.Contains(QUOTE))
            s = s.Replace(QUOTE, ESCAPED_QUOTE);

        if (s.IndexOfAny(CHARACTERS_THAT_MUST_BE_QUOTED) > -1)
            s = QUOTE + s + QUOTE;

        return s;
    }

    private void SqlToFile(string Sql, string FileName)
    {
        NpgsqlCommand cmd = new NpgsqlCommand(Sql, conn);
        NpgsqlDataReader reader = cmd.ExecuteReader();

        string[] outline = new string[reader.FieldCount];

        StreamWriter sw = new StreamWriter(FileName);

        while (reader.Read())
        {
            while (reader.Read())
            {
                for (int i = 0; i < reader.FieldCount; i++)
                    outline[i] = Escape(reader.GetValue(i).ToString());

                sw.WriteLine(String.Join(",", outline));
            }

        }

        reader.Close();
        sw.Close();
    }

感谢 Escape 方法,尽管我不记得是从谁那里偷的。

关于c# - C#获取postgres表数据(CSV格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44152909/

相关文章:

c# - 在网格上显示网格线

c# - XmlSerializer, "Specified"后缀和 IReflect

postgresql - 如何第一次连接到替代的本地 postgresql 集群?

postgresql - 如何配置基于 x509 客户端证书的身份验证以连接到基于 AWS RDS 的 PostgreSQL

postgresql - POSTGIS:找到多边形内的所有点

sql - 将 Oracle CONNECT BY 迁移到 postgresql 10

C# WinForms - 如何将更新从 DataGridView 发送到数据库

c# - 为什么 Application Insights TrackException 不记录任何内容?

c# - 使用运算符 <、<= 等测试两个对象

sql - 如何从postgresql中的sql结果中获得最大结果