繁体   English   中英

Npgsql如何处理演员类型

[英]How Npgsql deal with cast types

我注意到以下行为:

在pgAdmin中,我执行以下查询,并得到以下结果:

SELECT 
CAST(COALESCE(c.latitude, '-1') as varchar),
CAST(COALESCE(c.longitude, '-1') as varchar) 
FROM mytable c WHERE c.acolumn = 'S' AND c.anothercolumn=1

---------------------------------
coalesce            coalesce
character varying   character varying
"-25.30089"        |  "-57.625866"

我在C#项目中使用Npgsql版本2.2.4.3,使用IDbCommandIDataReader执行相同的查询,并得到以下结果:

IDbCommand cmd = con.CreateCommand();
cmd.Connection = con;
IDataReader reader = null;
cmd.CommandText = "SELECT CAST(COALESCE(c.latitude, '-1') as varchar), CAST(COALESCE(c.longitude, '-1') as varchar) FROM mytable c WHERE c.acolumn = 'S' AND c.anothercolumn=1";
cmd.CommandType = CommandType.Text;
reader = cmd.ExecuteReader();
while (reader.Read())
{
    string latitude_r= reader.GetValue(0).ToString();
    string longitude_r= reader.GetValue(1).ToString();
}

---------------------------------------------
latitude_r  "-25.300889999999999"   string
longitude_r "-57.625866000000002"   string

有人可以向我解释原因吗? 是因为我使用的是.NET IDbCommand接口? 没有这些多余的十进制值,有没有办法获得准确的值? 这是列的postgresql定义:

ALTER TABLE mytable ADD COLUMN longitude double precision;
ALTER TABLE mytable ADD COLUMN latitude double precision;

Npgsql 2现在已经很老了,您应该使用最新的稳定版本(3.0.5)。

您所看到的内容的解释很简单extra_float_digits 2将extra_float_digits参数设置为3(请参阅http://www.postgresql.org/docs/current/static/runtime-config-client.html)-这会导致更多要返回的数字,并且由于Npgsql与服务器之间的数据传输方式所必需。

Npgsql 3不再设置此参数(尽管您可以自己设置),因此您应该看到与pgAdmin中相同的行为。

暂无
暂无

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

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