【发布时间】:2012-11-05 01:00:21
【问题描述】:
我有类似下面的代码:
SqlDataReader sdr = null;
.
.
sdr = cmd.ExecuteReader();
while(sdr.Read()){
string x = sdr["x"].ToString();
Console.WriteLine(x);
long? y = Int64.Parse(sdr["y"].ToString());
}
我目前在解析 y 的值时正在调试一个问题。在数据库中,对于写入控制台的值 x,它表示 y 是一个数值(如果不是,则为 null)。
当抛出异常时,我将鼠标悬停在 sdr 上并导航到正在存储的实际数据。元素 [0] 中的值与刚刚写入屏幕的值 x 相对应。换句话说,肯定会访问 x,因为我可以看到 x 的正确值正在显示。但是,在 Visual Studio 2008 中,在调试时,查看对象的内存时,第一个元素的 x 列值与刚刚在控制台上显示的值不同!
-为什么我看不到被访问的元素? - 这个问题是否与我的数值未正确解析有关?
我确实注意到另一个奇怪的事情:我第一次在 Visual Studio 中查看 sdr 对象时,我可以看到元素。如果我将鼠标移动到屏幕的另一侧,然后将鼠标悬停在对象上,尝试遍历 sdr 读取器对象的元素,没有元素 - 好像它是空的?!?!
【问题讨论】:
-
我很惊讶
string x = sdr["x"];编译。您正在声明一个字符串变量并分配一个对象(数据读取器的indexer 始终返回一个对象)。 -
(编辑了我的最后一条评论)在 VB.NET 中,您可以设置
OPTION STRICT off(不推荐)。然后,您可以将对象分配给字符串。但这永远不会在 C# 中编译。 -
你确定 x 是 0 吗?试试 sdr.GetSting(0)。
标签: c# .net visual-studio-2008 .net-3.5