私が正しく理解していれば、NpgsqlCopySerializer を使用した NpgsqlCopyIn は次のように動作するはずです。
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");
テキスト形式(行区切り)からのコピーで特別な意味を持ち、エスケープする必要がある改行が含まれているため、例外がスローされます。
それを機能させるために私に何ができるか知っている人はいますか?インターネットで例を検索しましたが、何も見つかりませんでした。
ご協力いただきありがとうございます!