我使用的是以前版本的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.
需要帮助,任何建议都非常感谢。 提前谢谢。
答案 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)