 悬赏园豆:5
                [已解决问题] 
            
                    解决于 2018-03-01 11:03
                悬赏园豆:5
                [已解决问题] 
            
                    解决于 2018-03-01 11:03 
                 
        Quantity 在数据库中类型为:numeric 值为:1.000000 dr是datarow 为什么用下面的代码转换的时候会出现异常,提示出入的字符串格式不正确 Convert.ToInt32(dr["Quantity"].ToString()); 但是这样却可以 Convert.ToInt32(dr["Quantity"]); 为什么?
SQL Server 的 numeric 对应的 C# 类型是 Decimal ,详见 SQL Server Data Type Mappings
dr["Quantity"].ToString() 得到的是 Decimal 的字符串(不是 int 的字符串),直接转换当然会抛异常,如果用 Convert.ToDecimal() 就可以正常转换。如果一定要使用 ToString() ,需要这样转换为 int 。
(int)Convert.ToDecimal(dr["Quantity"].ToString());Convert.ToInt32(dr["Quantity"]); 只是 Decimal 向 int 的转换,所以没问题。
测试代码:
class Program
{
    static void Main(string[] args)
    {
        var dt = new DataTable();
        var dc = new DataColumn("Quantity", typeof(Decimal));
        dt.Columns.Add(dc);
        var dr = dt.NewRow();
        Decimal value = 1.000000M;
        dr[0] = value;
        dt.Rows.Add(dr);
        var quantity = dr["Quantity"].ToString();
        Console.WriteLine(quantity); // output is 1.000000
        Console.WriteLine((int)Convert.ToDecimal(dr["Quantity"].ToString())); // output is 1
    }
}z这不是值类型和引用类型的问题..
数字类型的1和字符串的1本来值就不一样.用同一个方法当然不行
学习了,很容易想通的啊