Npgsql 3 Geometry x使用writer.Write <npgsqlline>遇到无效的endian标志值

时间:2016-02-01 09:45:11

标签: npgsql

我使用的是以前版本的npgsql(2.0.7),它运行正常。 现在我已升级到npgsql 3.0.5 并重新编写3.0.5的复制方法 我必须更改几何代码

我尝试使用

while 
{
    var line = new NpgsqlLine(122149.006850, 483672.683450, 122156.366150);
    writer.Write<NpgsqlLine>(line, NpgsqlDbType.Line)
}
writer.Close();

在调试模式下:在循环中没问题,但是当writer.Close()时 错误!!有了这条消息

XX000: Invalid endian flag value encountered.

需要帮助,任何建议都非常感谢。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

希望它可以帮到你,因为我遇到了同样的问题。

在我的情况下,它通过带走我的&#34;使用&#34;来解决。指令:

而不是:

using (var writer = conn.BeginBinaryImport("sql copy from stdin command"){  ///writer.StartRow(); writer.Write(...); writer.Write();}

带走:

var writer = conn.BeginBinaryImport("sql copy from stdin command");
then in while statement:
while(condition){writer.StartRow(); writer.Write(...); writer.Write();}

我认为问题来自于使用指令管理的writer.Dispose():实际上,如果不使用指令,如果调用writer.Dispose(),则会引发相同的Npgsql异常。

祝你好运!

答案 1 :(得分:0)

以上操作无效-在4.05中,您必须这样做

dbimporter.Complete()

但是这适用于所有加载到postgres中的几何列中的几何类型

使用

Dim conn As New NpgsqlConnection

Dim ct As String = "COPY " + datatab + "( " + datacolumns + ") FROM STDIN (FORMAT BINARY)"

Dim dbimporter = conn.BeginBinaryImport(ct)

当您需要使用此数据导入几何数据时,将需要sqlserverdatatypes dll

dim wkt1 as string ="POINT(7 7)" - any wkt geometry representation

Dim udtText1 As New System.Data.SqlTypes.SqlChars(wkt1)
Dim sqlGeometry11 As Microsoft.SqlServer.Types.SqlGeometry = Microsoft.SqlServer.Types.SqlGeometry.STGeomFromText(udtText1, srid)

Dim ms1 As New MemoryStream()
Dim bw1 As New BinaryWriter(ms1)
Dim WKB1() As Byte = sqlGeometry11.STAsBinary().Buffer
bw1.Write(WKB1)

dbimporter.Write(WKB1, NpgsqlTypes.NpgsqlDbType.Bytea)