C# 不存在数据时读取的尝试无效

C# 不存在数据时读取的尝试无效,c#,ado.net,sqldatareader,C#,Ado.net,Sqldatareader,当我调试到第7行时,它是正常的,但在那之后,dr抛出一个异常: 当不存在数据时尝试读取无效 我不明白为什么会出现这种异常,因为表中确实有username=sumant的数据 请告诉我“如果”陈述是否正确。如何修复错误?在尝试读取任何数据之前,必须调用dr.Read()。如果没有要读取的内容,该方法将返回false。您必须调用以获取结果: private void button1_Click(object sender, EventArgs e) { string

当我调试到第7行时,它是正常的,但在那之后,
dr
抛出一个异常:

当不存在数据时尝试读取无效

我不明白为什么会出现这种异常,因为表中确实有username=sumant的数据


请告诉我“如果”陈述是否正确。如何修复错误?

在尝试读取任何数据之前,必须调用
dr.Read()
。如果没有要读取的内容,该方法将返回false。

您必须调用以获取结果:

    private void button1_Click(object sender, EventArgs e)
    {
        string name;
        name = textBox5.Text;
        SqlConnection con10 = new SqlConnection("con strn");
        SqlCommand cmd10 = new SqlCommand("select * from sumant where username=@name");
        cmd10.Parameters.AddWithValue("@name",name);
        cmd10.Connection = con10;
        cmd10.Connection.Open();//line 7
        SqlDataReader dr = cmd10.ExecuteReader();
    }

    if ( textBox2.Text == dr[2].ToString())
    {
        //do something;
    }
DataReader.Read()
返回一个
bool
,指示是否有更多的数据块要读取,因此如果有多个结果,可以执行以下操作:

SqlDataReader dr = cmd10.ExecuteReader();
if (dr.Read()) 
{
    // read data for first record here
}

我将检查SqlDataReader是否首先返回了行:

while (dr.Read()) 
{
    // read data for each record here
}

我刚刚遇到这个错误,我调用的是
dr.NextResult()
,而不是
dr.Read()

,我使用了下面的代码,它对我有效

SqlDataReader dr = cmd10.ExecuteReader();
if (dr.HasRows)
{
   ...
}

我有两个可能包含空值的值

String email="";
    SqlDataReader reader=cmd.ExecuteReader();
    if(reader.Read()){
        email=reader["Email"].ToString();
    }

String To=email;

解决了问题

除此之外,您可能希望使用dr.IsBDNull(0)
“您必须调用DataReader.Read来获取结果:”
一看到这一点,我马上就会说,“哦!耶!我没有调用.Read()”。你知道,我已经做了35年了。你会想。。。。。。。。。。。lolin在我的例子中,我有这个,尽管我在其他地方使用过这个,在这个产生这个错误的特定场景中,这并没有阻止错误冒泡。我的查询结果有行,但读取器没有数据。我真的不明白发生了什么事。我自己验证了查询和参数。
while(dr.Read())
 {
    Id = dr["Id"] as int? ?? default(int?);
    Alt =  dr["Alt"].ToString() as string ?? default(string);
    Name = dr["Name"].ToString()
 }