我们最近将Npgsql库从(非常旧)2.0.11.91升级到最新版本3.2.1。
在Npgsql 2中,返回的所有数值(使用NpgsqlDataAdapter,NpgsqlDataReader等)将具有查询中数据类型的精度和比例(如果未在查询中专门设置,则具有Postgres表中的数据类型)。例如:
pom.xml
然而,在Npgsql 3中,现在返回带有小数的所有数值(使用NpgsqlDataAdapter,NpgsqlDataReader等)以及额外的不必要小数(总小数总数= 4),尽管精度&在查询中(或在Postgres表中)设置比例。例如:
string sql_query = "SELECT 2.33::numeric(38,2)" would return 2.33
使用NpgsqlDataAdapter向DataGridView提取代码:
string query = "SELECT 2.33::numeric(38,2)" now returns 2.3300
string query= "SELECT 2.3::numeric(38,1)" now returns 2.3000
使用NpgsqlDataReader进行代码提取
NpgsqlConnection conn = new NpgsqlConnection("all_required_paramaters");
conn.Open();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
string sql = "SELECT date , numeric_data1, numeric_data2 , numeric_data3
FROM any_table order by date desc ";
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
ds.Reset();
da.Fill(ds);
dt = ds.Tables[0];
dataGridView_ABC.DataSource = dt;
conn.Close();
唯一的例外是当值没有任何小数时,它们会被正确返回,例如:
NpgsqlConnection conn = new NpgsqlConnection("all_required_paramaters");
conn.Open();
string sql = "SELECT date , numeric_data1, numeric_data2 , numeric_data3
FROM any_table order by date desc ";
NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
Npgsql.NpgsqlDataReader res = cmd.ExecuteReader();
List<string> _data1 = new List<string>();
List<string> _data2 = new List<string>();
List<string> _data3 = new List<string>();
while (res.Read())
{
_data1.Add(res["numeric_data1"].ToString());
_data2.Add(res["numeric_data2"].ToString());
_data3.Add(res["numeric_data3"].ToString());
}
conn.Close();
res.Close();
问题:如何使Npgsql 3.2.1返回数据类型的精度和比例&amp;查询或Postgres表中的长度(即没有所有不必要的额外小数),因为它在Npgsql 2中默认完成?
非常感谢。