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/