我试图使用带有NetTopologySuite的npgsql将一个3d点(和linestring)写入数据库表。我使用的是上一个版本(4.0.3),显然已经解决了#1906问题。我的代码:
NpgsqlConnection conn = new NpgsqlConnection ( "Host=localhost;Port=5433;Username=test;Password=test;Database=maindb" );
conn.Open();
conn.TypeMapper.UseNetTopologySuite( handleOrdinates: Ordinates.XYZ );
NpgsqlCommand cmd = new NpgsqlCommand ( "INSERT INTO public.testtable (position) VALUES (@position)", conn );
cmd.Parameters.Add ( "position", NpgsqlDbType.Geometry );
NetTopologySuite.Geometries.Point pp = new NetTopologySuite.Geometries.Point ( 1, 2, 3 );
cmd.Parameters["position"].Value = pp;
cmd.ExecuteNonQuery();但是这不起作用,因为在表中插入一个平面的2D点。
我正在使用这个版本的包:
配置是否有问题,或者我需要做一些其他的事情来使3D点工作?
P.S.:我找到了一个可行的解决办法,但真诚地说,这似乎很丑陋:
NpgsqlConnection conn = new NpgsqlConnection ( "Host=localhost;Port=5433;Username=test;Password=test;Database=maindb" );
conn.Open();
conn.TypeMapper.UseNetTopologySuite( handleOrdinates: Ordinates.XYZ );
NpgsqlCommand cmd = new NpgsqlCommand ( "INSERT INTO public.testtable (position) VALUES (@position)", conn );
cmd.Parameters.Add ( "position", NpgsqlDbType.Text );
NetTopologySuite.Geometries.Point pp = new NetTopologySuite.Geometries.Point ( 1, 2, 3 );
cmd.Parameters["position"].Value = pp.ToString();
cmd.ExecuteNonQuery();发布于 2018-12-07 08:21:15
好的,最近一次发布的Npgsql (4.0.4)和Npgsql.NetTopologySuite (4.0.4)已经解决了问题
发布于 2018-11-19 13:17:33
似乎您忘了将Ordinates.XYZ传递给UseNetTopologySuite(),如Npgsql文档所示
conn.TypeMapper.UseNetTopologySuite(handleOrdinates: Ordinates.XYZ);https://stackoverflow.com/questions/52698129
复制相似问题