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"]);

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

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