如果我正确理解 NpgsqlCopyIn 和 NpgsqlCopySerializer 应该像这样工作:
var conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["PostgreSqlDb"].ConnectionString);
conn.Open();
var tran = conn.BeginTransaction();
var cmd = new NpgsqlCommand("COPY address (id, employee, value) FROM STDIN", conn);
var npgsqlCopySerializer = new NpgsqlCopySerializer(conn);
var npgsqlCopyIn = new NpgsqlCopyIn(cmd, conn, npgsqlCopySerializer.ToStream);
try
{
npgsqlCopyIn.Start();
npgsqlCopySerializer.AddInt32(300);
npgsqlCopySerializer.AddInt32(1);
npgsqlCopySerializer.AddString("address");
npgsqlCopySerializer.EndRow();
npgsqlCopySerializer.Flush();
npgsqlCopySerializer.AddInt32(301);
npgsqlCopySerializer.AddInt32(1);
npgsqlCopySerializer.AddString("another\r\naddress");
npgsqlCopySerializer.EndRow();
npgsqlCopySerializer.Flush();
npgsqlCopyIn.End();
tran.Commit();
}
//catch (Exception e)
//{
// tran.Rollback();
// throw;
//}
finally
{
conn.Close();
}
问题是每次没有允许的字符时,AddString()
它都会在该方法内部抛出一个ArgumentOutOfRangeException
,否则它会起作用。
例如:
npgsqlCopySerializer.AddString("another\r\naddress");
将抛出异常,因为它包含一个换行符,该换行符在文本格式(行分隔符)的副本中具有特殊含义,应该被转义。
任何人都知道我可以做些什么来使它工作?我在互联网上搜索示例,但找不到任何东西。
谢谢你的帮助!