postgresql 如何从Ado.Net阅读器中获取列值

jei2mxaa  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(154)

我尝试从Ado.Net获取给定表列的值,如下所示

var query = "select transmission_time, actual_transaction_amount as sum_amount FROM table_name";

        using (NpgsqlConnection conn = new NpgsqlConnection("connectionString"))
        {
            conn.Open();
            NpgsqlCommand command = new NpgsqlCommand(query, conn);

            using (NpgsqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var amount = reader.GetDecimal(Convert.ToInt32(reader["sum_amount"]));
                    result.Add(amount.ToString());//= amount;
                }
            }

但我收到错误
System.OverflowException:值对于Int32.Blockquote而言太大或太小
但当我把这行改成

var amount = reader.GetDecimal(Convert.ToInt64(reader["sum_amount"]));

我得到以下错误
参数1无法从'long'转换为'int'
请我需要将该列中的数字转换为数字,并在结果中返回。
我尝试获取的列中的值与以下示例类似
postgreSql表中的10000、5000、20000等
该应用程序是一个运行在Windows上的Asp.Net6应用程序。如有任何帮助,我们将不胜感激。谢谢

ni65a41a

ni65a41a1#

这行字说不通:

var amount = reader.GetDecimal(Convert.ToInt32(reader["sum_amount"]));

我假设您实际上要做的是从sum_amount列中获取一个int值,并将其转换为decimal。(即,object参考),将其打开,然后使用int值作为索引,从可能不存在其他列中获取decimal。我认为您实际上是想这样做:

var amount = Convert.ToDecimal(reader.GetInt64("sum_amount"));

相关问题