[c#] 데이터가 없을 때 잘못된 읽기 시도

    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;
    }

7 행까지 디버그하면 괜찮지 만 그 후에 dr은 예외를 발생시킵니다.
Invalid attempt to read when no data is present.
던집니다. 사용자 이름 = sumant 인 테이블에 데이터가 있으므로 불가능합니다. ‘if’문구가 맞는지 알려주세요 ………

그리고 어떻게 오류를 제거합니까 ??



답변

DataReader.Read결과를 가져 오려면 호출 해야합니다.

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

DataReader.Read()bool읽을 데이터 블록이 더 있는지 여부를 나타내는를 반환 하므로 결과가 2 개 이상이면 다음을 수행 할 수 있습니다.

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


답변

dr.Read()데이터를 읽기 전에 호출 해야합니다. 읽을 것이 없으면이 메서드는 false를 반환합니다.


답변

이 오류가 발생했습니다 . dr.NextResult()대신 dr.Read().


답변

SqlDataReader에 먼저 반환 된 행이 있는지 확인합니다.

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


답변

나는 아래 코드를 사용했고 그것은 나를 위해 일했습니다.

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

String To=email;


답변

null 값을 포함 할 수있는 2 개의 값이 있습니다.

while(dr.Read())
 {
    Id = dr["Id"] as int? ?? default(int?);
    Alt =  dr["Alt"].ToString() as string ?? default(string);
    Name = dr["Name"].ToString()
 }

문제를 해결했습니다.


답변