在使用Npgsql二进制副本时出现此错误(请参阅底部的实现):
invalid sign in external "numeric" value
失败的RetailCost列具有以下PostgreSQL属性:
PostgreSQL日志如下:
2019-07-15 13:24:05.131 ACST [17856] ERROR: invalid sign in external "numeric" value
2019-07-15 13:24:05.131 ACST [17856] CONTEXT: COPY products_temp, line 1, column RetailCost
2019-07-15 13:24:05.131 ACST [17856] STATEMENT: copy products_temp (...) from stdin (format binary)
我认为这无关紧要,但是RetailCost值只有零个或正数(没有负数或空值)
我的实现如下:
using (var importer = conn.BeginBinaryImport($"copy {tempTableName} ({dataColumns}) from stdin (format binary)"))
{
foreach (var product in products)
{
importer.StartRow();
importer.Write(product.ManufacturerNumber, NpgsqlDbType.Text);
if (product.LastCostDateTime == null)
importer.WriteNull();
else
importer.Write((DateTime)product.LastCostDateTime, NpgsqlDbType.Timestamp);
importer.Write(product.LastCost, NpgsqlDbType.Numeric);
importer.Write(product.AverageCost, NpgsqlDbType.Numeric);
importer.Write(product.RetailCost, NpgsqlDbType.Numeric);
if (product.TaxPercent == null)
importer.WriteNull();
else
importer.Write((decimal)product.TaxPercent, NpgsqlDbType.Numeric);
importer.Write(product.Active, NpgsqlDbType.Boolean);
importer.Write(product.NumberInStock, NpgsqlDbType.Bigint);
}
importer.Complete();
}
任何建议都会受到欢迎
答案 0 :(得分:0)
问题的原因是importer.Write语句与dataColumns的顺序不同
答案 1 :(得分:0)
我在使用 MapBigInt 时导致了这个问题,没有意识到列是意外的数字 (18)。将列更改为 bigint 解决了我的问题。