3

那里的新问题。在从数据库中读取数据并且记录用完时,它只是说“当没有数据存在时尝试读取无效”,所以问题是如何防止这种情况发生?

这是我的代码:

{
    Label3.Text = Request.QueryString["Username"];

}

SqlConnection con = new SqlConnection("Data Source=JEVGENIJ-PC;Initial Catalog=ViaFitness;Integrated Security=True");
static SqlDataReader dr;
SqlCommand cmd;

protected void Button1_Click(object sender, EventArgs e)
{

    con.Open();

    SqlCommand cmd = new SqlCommand("select * from Summary where UserName='"+Label3.Text+ "'", con);

    dr = cmd.ExecuteReader();
    dr.Read();
    Label3.Text = dr[2].ToString();
    Label1.Text = dr[1].ToString();
    Label2.Text = dr[0].ToString();

}
 protected void Button2_Click(object sender, EventArgs e)
{
    dr.Read();
    Label3.Text = dr[2].ToString();
    Label1.Text = dr[1].ToString();
    Label2.Text = dr[0].ToString();
    con.Close();
}

}

4

4 回答 4

2

在每次获取之前调用 dr.read。检查它是否为真,这意味着数据存在

MSDN SqlDataReader.Read方法 - 将 SqlDataReader 推进到下一条记录。

SqlDataReader reader = command.ExecuteReader();

// Call Read before accessing data. 
while (reader.Read())
{
        ReadSingleRow((IDataRecord)reader);
}

// Call Close when done reading.
reader.Close();
于 2013-04-21T13:30:44.370 回答
2

您应该确保您的阅读器中有数据:

protected void Button1_Click(object sender, EventArgs e)
{

    con.Open();

    SqlCommand cmd = new SqlCommand("select * from Summary where UserName='"+Label3.Text+ "'", con);

    dr = cmd.ExecuteReader();
    if (dr.Read())
    {
        Label3.Text = dr[2].ToString();
        Label1.Text = dr[1].ToString();
        Label2.Text = dr[0].ToString();
    }

}
 protected void Button2_Click(object sender, EventArgs e)
{
    if (dr.Read())
    {
        Label3.Text = dr[2].ToString();
        Label1.Text = dr[1].ToString();
        Label2.Text = dr[0].ToString();
    }
    con.Close();
}

查看 MSDN 页面了解更多信息:http: //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx

于 2013-04-21T13:31:00.563 回答
1

Datareader Read() 方法返回布尔值。如果它返回true,它成功读取下一条记录,如果它返回false - 它不是读取记录,因为没有更多记录。所以你应该测试 Read 方法的结果,然后尝试访问它的值。

于 2013-04-21T13:32:15.283 回答
0

Read()跳转到下一条记录。没有什么是你不能访问的。只为一张唱片试试这个

If(dr.Read()) {
    Label3.Text = dr[2].ToString();
    Label1.Text = dr[1].ToString();
    Label2.Text = dr[0].ToString();
}

或者这对所有人

While(dr.Read())) {
    ' do something
}
于 2013-04-21T13:32:21.623 回答