【发布时间】:2017-11-23 23:41:27
【问题描述】:
我使用 SQL Server 构建我的数据库并使用 SqlDataReader 从中读取数据。
command.Connection = cn;
command.CommandText = "SELECT * FROM test";
SqlDataReader rd = command.ExecuteReader();
while(rd.Read())
{
double d = (double) rd.GetValue(0);
}
我试图从中获取值的列 (0) 是 'float' 类型,并且具有值 '3.5' 。作为来自此MSDN link 的映射数据类型,rd.GetValue(0) 返回的对象类型必须为'double'。但是上面的代码返回变量'd'值'0.0'。我试过这条线:
double d = Convert.ToDouble(rd.GetValue(0));
但它仍然将“0.0”返回给变量“d”。
我尝试在 Google 和 StackOverflow 上搜索,但没有结果。
我错过了什么?帮帮我!
【问题讨论】:
-
给定表中是否只有 1 个条目?如果没有订单,您无法验证是否确实返回了字段值 = 3.5 的行,以防您的表上有多个记录
-
尝试使用 GetDouble 而不是 GetValue
-
@apomene 我通过放置断点进行检查并进入调试模式,rd.GetValue(0) 的对象确实是 '3.5' 并且类型为 'object {double}'。
-
@PhạmThành 我的问题仍然存在......你只有 1 行吗?例如,如果您有 3 行,是的,您可以在调试模式下将此对象设置为第 1 行或第 2 行的 3,5,但您的代码采用上次迭代的值
-
你实际上在用 d 做什么?目前
d立即超出范围,因此无法立即看出您对这段代码的实际期望......如果您有类似的功能正在工作,那么比较两者并找出区别是什么。编码不是魔法。它做你告诉它的事情,你清楚地在你的代码中告诉它两件不同的事情。如果您真的找不到差异,请在问题中发布两种方法,我们可以为您找出差异(尽管您真的不需要这个)。
标签: c# .net sql-server casting type-conversion