Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLDataReader不显示第一个元素,但访问它?_C#_.net_Visual Studio 2008_.net 3.5 - Fatal编程技术网

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)。