ASP.NET:如果我的sql数据类型为float,什么是DataReader返回类型?

问题描述

| 我的sql列“价格”数据为float类型。 当我使用“ 0”读入一行并尝试以以下方式访问列值时
reader[\"Price\"]
我遇到了一个编译器错误:\“对于
decimal.Parse(string)
的最佳重载方法匹配具有一些无效的参数。\” 我想将此值分配给一个十进制变量,我该怎么做? 我尝试时遇到了上面的编译器错误
decimal price;
price = decimal.Parse(reader[\"Price\"]);
    

解决方法

        
reader[\"Price\"]
的返回类型为
object
。要执行您要尝试执行的操作,请使用以下命令:
price = decimal.Parse(reader[\"Price\"].ToString()); 
但是,如果有微小的变化,您可能会得到无法转换为Decimal的字符串,请考虑使用Decimal.TryParse方法,该方法将使您确定转换是否成功。 编辑 SqlDataReader具有许多不同的GetXXX方法,这些方法使您可以从DataReader的列中检索类型化的数据,而不必首先强制转换为中间类型或从中间类型强制转换。我最初建议您使用
SqlDataReader.GetDecimal
,因为我看到要检索的类型是十进制。现在,我看到该数据的SQL数据类型实际上是浮动的,因此我建议您使用
SqlDataReader.GetFloat
。我对此进行了测试,并得到了无效的强制转换异常。原因是SQL浮点数与.NET浮点数据类型不兼容。 因此,我在MSDN上检查了SQL Server数据类型及其.NET Framework等效项中的表,发现SQL浮动等效于.NET double。我尝试了“ 9”,并且能够正确地检索数据。由于您想要的是小数,因此您需要强制转换:
price = (decimal)reader.GetDouble(reader.GetOrdinal(\"Price\"));
    ,        
decimal.Parse
期望
string
作为参数。它从
string
中解析出
decimal
reader[\"Price\"]
是对象,而该对象下的实型将是
float
。 失败的原因是因为它无法将对象转换为字符串。 所以你可以做
var price = Convert.ToDecimal(reader[\"Price\"]);
要么
var price = (float)reader[\"Price\"];
如果您确定输入的内容是
float
。     ,        SQL Float是C#中的Double。查看文档。 http://msdn.microsoft.com/en-us/library/ms131092.aspx