ASP.NET 从数据库中读取数据

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个回答

2

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

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();

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/zh-cn/library/system.data.sqlclient.sqldatareader.read.aspx


1

DataReader的Read()方法返回一个布尔值。如果返回true,它成功地读取了下一条记录;如果返回false,则没有读取记录,因为没有更多记录可读。 因此,您应该测试Read方法的结果,然后尝试访问其值。


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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接