【问题标题】:SqlDataReader GetDecimal without .00没有 .00 的 SqlDataReader GetDecimal
【发布时间】:2013-07-22 03:32:31
【问题描述】:

我想知道如何在没有.00 的情况下使用我的SqlDataReader 数据类型数字(9,2) 进行阅读。这是我的阅读代码:

SqlCommand comm = new SqlCommand("SELECT * FROM table", conn);
                spojeni.Open();
                SqlDataReader reader = comm .ExecuteReader();
textBox19.Text = reader .GetDecimal(22).ToString().Replace(',', '.');
}

您能否告诉我应该如何改进这段代码以在没有 .00 的情况下阅读它?

【问题讨论】:

    标签: c# sql sql-server sqldatatypes


    【解决方案1】:

    您可以在 SQL 语句中转换值:

    select *, cast(ColumnName as numeric(9,0)) as Alias from klient where ID_K=1
    

    编辑:

    我根本不会使用 GetDecimal,因为我不太喜欢只有整数可供选择的重载的想法,我个人认为使用给定的列名阅读会更好。

    所以要从 cast 列中获取数据,我会执行以下操作:

    decimal value = 0;
    decimal.TryParse(Convert.ToString(reader["Alias"]), out value);
    textBox19.Text = value.ToString();
    

    这可以很容易地变成 SqlDataReader 的扩展,如下所示:

    public static decimal GetDecimal(this SqlDataReader reader, string columnName)
    {
        decimal value = 0;
        decimal.TryParse(Convert.ToString(reader[columnName]), out value);
        return value;
    }
    

    而不仅仅是调用以下内容:

    textBox19.Text = precti.GetDecimal("Alias").ToString();
    

    编辑 2:

    我的脑海中浮现出一些你可能更喜欢的东西。 进行强制转换时抛出了 SQL 语句,您只需按照您想要的方式格式化您的十进制数字,使用以下代码:

    textBox19.Text = string.Format("{0:n0}", precti.GetDecimal(22));
    

    "{0:n0}" 将产生一个小数点后为 0 位的数值。

    【讨论】:

    • 你好,谢谢你的回答,有没有办法改进读取命令?感谢您的宝贵时间。
    • 如果您能进一步解释“改进读取命令”的含义,我可以提供帮助。
    • 我的意思是这行代码:textBox19.Text = precti.GetDecimal(22).ToString().Replace(',', '.');
    • 非常感谢,有没有办法在没有可用空间的情况下制作它?现在它就像 1 123 而不是 1123
    • 将 n 更改为 d,n 将导致像文化所说的那样被格式化,所以当千位分隔符是一个点时,它将是 - 1.123 与 d 你忽略了这一点,只显示一个常规数字没有格式。所以: textBox19.Text = string.Format("{0:d0}", precti.GetDecimal(22));关于格式的一个不错的小页面在这里:alexonasp.net/samples/stringformatting
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多