繁体   English   中英

Npgsql在PostgreSQL数据库中插入地球数据

[英]Npgsql Inserting earth data in PostgreSQL database

我有一个已激活Earthdistance模块的PostgreSQL数据库。 我有一列的数据类型设置为大地。 有没有办法使用Npgsql插入新记录? 我试图使用ll_to_earth(lat,long)函数,但收到错误“ installation_location \\”是地球类型,但表达式是文本类型”

int din_id = 5;
using (var cmd = new NpgsqlCommand("INSERT INTO installation_test 
                               (installation_id,  installation_location ) " +
                               "VALUES (@uin_id, @uin_loc  ) ", connection))
{
    cmd.Parameters.AddWithValue("uin_id", din_id);
    cmd.Parameters.AddWithValue("uin_loc", 
                                  "ll_to_earth(-23.482409,153.141043)");
    cmd.ExecuteNonQuery();
}

谢谢

参数不能以这种方式使用:您不能将任意SQL放入要由数据库执行的参数数据中(在本例中为ll_to_earth函数调用)。 数据库不会将参数数据评估为SQL,但需要一个实际值。 您正在寻找的可能是没有任何参数的简单INSERT:

using (var cmd = new NpgsqlCommand("INSERT INTO installation_test 
                    (installation_id,  installation_location ) " +
                    "VALUES (@uin_id, ll_to_earth(-23.482409,153.141043)) ", connection))
{
    cmd.Parameters.AddWithValue("uin_id", din_id);
    cmd.ExecuteNonQuery();
}

但是,您可以参数化传递给ll_to_earth的点:

using (var cmd = new NpgsqlCommand("INSERT INTO installation_test 
                    (installation_id,  installation_location ) " +
                    "VALUES (@uin_id, ll_to_earth(@x,@y)) ", connection))
{
    cmd.Parameters.AddWithValue("uin_id", din_id);
    cmd.Parameters.AddWithValue("x", -23.482409);
    cmd.Parameters.AddWithValue("y", -23.482409);
    cmd.ExecuteNonQuery();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM