C# SQLDataReader不显示第一个元素,但访问它?
我有类似以下代码:C# SQLDataReader不显示第一个元素,但访问它?,c#,.net,visual-studio-2008,.net-3.5,C#,.net,Visual Studio 2008,.net 3.5,我有类似以下代码: 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是一个数值(如果
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的正确值。然而,在VisualStudio2008中,当调试时,查看对象的内存时,第一个元素的x列值与控制台上刚刚显示的值不同
-为什么我看不到已访问的元素?
-这个问题是否与我的数值解析不正确有关
我确实注意到了另一件奇怪的事情:第一次在VisualStudio中查看sdr对象时,我可以看到元素。如果我将鼠标移到屏幕的另一侧,然后将鼠标悬停在对象上,尝试遍历sdr reader对象的元素,则没有元素-就好像它是空的 这不是使用SqlDataReader的方法 撇开@TimSchmelter所述的编译问题不谈,您应该编写代码,在尝试访问和转换SqlDataReader的值之前检查DBNull.Value
string x = string.Empty;
int index = sdr.GetOrdinal("x");
if (!sdr.IsDBNull(index))
x = sdr.GetString(index);
long? y;
index = sdr.GetOrdinal("y");
if (!sdr.IsDBNull(index))
y = sdr.GetInt64(index);
我很惊讶
string x=sdr[“x”]代码>编译。您正在声明一个字符串变量并分配一个对象(datareader的始终返回一个对象)。(编辑了我的最后一条注释)在VB.NET中,您可以设置选项STRICT off
(不推荐)。然后可以将对象指定给字符串。但这永远不会在C#中编译。你确定x是0吗?请尝试sdr.GetSting(0)。