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本来值就不一样.用同一个方法当然不行
学习了,很容易想通的啊