Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Npgsql返回额外的“;0“;所有数值后的小数_C#_Npgsql - Fatal编程技术网

C# Npgsql返回额外的“;0“;所有数值后的小数

C# Npgsql返回额外的“;0“;所有数值后的小数,c#,npgsql,C#,Npgsql,我们最近将Npgsql库从(非常旧的)2.0.11.91升级到最新版本3.2.1 在Npgsql 2中,返回的所有数值(使用NpgsqlDataAdapter、NpgsqlDataReader等)将具有查询中数据类型的精度和比例(如果查询中未专门设置,则在Postgres表中)。例如: string sql_query = "SELECT 2.33::numeric(38,2)" would return 2.33 string query = "SELECT 2.33::numeric(38

我们最近将Npgsql库从(非常旧的)2.0.11.91升级到最新版本3.2.1

在Npgsql 2中,返回的所有数值(使用NpgsqlDataAdapter、NpgsqlDataReader等)将具有查询中数据类型的精度和比例(如果查询中未专门设置,则在Postgres表中)。例如:

string sql_query = "SELECT 2.33::numeric(38,2)" would return 2.33
string query = "SELECT 2.33::numeric(38,2)" now returns 2.3300

string query= "SELECT 2.3::numeric(38,1)" now returns 2.3000
 string query= "SELECT 2::numeric(38,0)" does correctly returns 2
然而,在Npgsql 3中,所有带小数的数值现在都返回(使用NpgsqlDataAdapter、NpgsqlDataReader等)带有其他不必要的小数(小数总数始终=4),尽管在查询(或Postgres表)中设置了精度和小数位数。例如:

string sql_query = "SELECT 2.33::numeric(38,2)" would return 2.33
string query = "SELECT 2.33::numeric(38,2)" now returns 2.3300

string query= "SELECT 2.3::numeric(38,1)" now returns 2.3000
 string query= "SELECT 2::numeric(38,0)" does correctly returns 2
使用NpgsqlDataAdapter将代码提取到DataGridView:

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();
使用NpgsqlDataReader进行代码提取

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在查询或Postgres表中返回数据类型和长度的精度和比例(即没有所有不必要的额外小数),就像Npgsql 2中默认的那样


非常感谢。

您能发布您正在运行的代码吗(不仅仅是查询)?Npgsql 2.x(通常)以文本形式传输值,而Npgsql 3.x以二进制形式传输值。一般来说,您应该将PostgreSQL的数字数据类型作为.NET十进制(而不是字符串)读取。嗨,Shay,谢谢您的快速回复。我向DataGridView添加了NpgsqlDataAdapter的代码提取。我还可以提供您想要的NpgsqlDataReader的代码摘录。谢谢。是的,请提供数据读取器摘录。添加了数据读取器摘录。Github问题:您可以发布您正在运行的代码(而不仅仅是查询)吗?Npgsql 2.x(通常)以文本形式传输值,而Npgsql 3.x以二进制形式传输值。一般来说,您应该将PostgreSQL的数字数据类型作为.NET十进制(而不是字符串)读取。嗨,Shay,谢谢您的快速回复。我向DataGridView添加了NpgsqlDataAdapter的代码提取。我还可以提供您想要的NpgsqlDataReader的代码摘录。谢谢。是的,请提供数据读取器摘录。添加了数据读取器摘录。Github问题: