ASP.NET:如果我的sql数据类型是float,那么DataReader返回类型是什么
本文关键字:float 那么 DataReader 是什么 返回类型 数据类型 NET 如果 我的 sql ASP | 更新日期: 2023-09-27 17:59:22
Price列的SQL数据类型为float。当我使用DataReader
读取一行并尝试以的形式访问列值时
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 float等价于.NET double。我尝试了SqlDataReader.GetDouble
,并且能够毫无错误地检索数据。既然你想要一个小数,你需要转换:
price = (decimal)reader.GetDouble(reader.GetOrdinal("Price"));
decimal.Parse
期望string
作为参数。它从CCD_ 11中解析出CCD_。
reader["Price"]
是对象,而该对象下面的实际类型将是float
。
它失败的原因是它无法将对象强制转换为字符串。
所以你可以做
var price = Convert.ToDecimal(reader["Price"]);
或
var price = (float)reader["Price"];
如果您确信您键入的是float
。
SQL浮点是C#中的Double。查看文档。http://msdn.microsoft.com/en-us/library/ms131092.aspx