【问题标题】:Read decimal from SQL Server database从 SQL Server 数据库中读取十进制
【发布时间】:2016-02-03 18:51:45
【问题描述】:

我想从 SQL Server 数据库中读取多个类型 decimal(8,2),并将它们存储在对象 MyRow 中。

public class MyRow
{
    public decimal data1 { get; set; }
}

...

List<MyRow> values = new List<MyRow>();
SqlDataReader reader = command.ExecuteReader();

while (reader.read())
{
    values.Add( new MyRow() { 
        data1 = decimal.Parse(((double)reader["data1"]).ToString("R")) 
    }
}

这个解决方案似乎远非理想,而且似乎我为一些看起来相当简单的东西做了太多的转换。由于data 的值在数据库中已经是decimal(8,2),有没有办法将数据读入decimal 类型而不需要从object 转换为decimal

【问题讨论】:

    标签: c# .net sql-server


    【解决方案1】:

    您可以使用SqlDataReaderGetDecimal 方法。 SqlDataReader 对象实现了 IDataRecord 接口。因此,它实现了许多方法。在这些方法中,有GetDecimal

    有关这方面的更多信息,请查看here

    话虽如此,你的代码可以写成如下:

    List<MyRow> values = new List<MyRow>();
    SqlDataReader reader = command.ExecuteReader();
    while (reader.read())
    {
        values.Add(new MyRow() 
        { 
            data1 = reader.GetDecimal(reader.GetOrdinal("data1")) 
        });
    }
    

    【讨论】:

      【解决方案2】:

      您检查过SqlDataReader.GetDecimal 方法吗?

      【讨论】:

        【解决方案3】:

        使用 SqlDataReader 的GetDecimal 方法。

        var values = new List<MyRow>();
        while (reader.Read())
        {
           var r = new MyRow { data1 = reader.GetDecimal(reader.GetOrdinal("data1"))};
           values.Add(r);
        }
        

        【讨论】:

          【解决方案4】:

          使用精度和比例

          这里是代码sn-p

          // Assume, com is SqlCommand and ExchangeRate is Parameter
          
          SqlParameter parameter = new SqlParameter("@ExChangedRate", SqlDbType.Decimal);
          parameter.Direction = ParameterDirection.Output;
          parameter.Precision = 16;
          parameter.Scale = 2;
          com.Parameters.Add(parameter);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-14
            • 2015-01-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多