ASP.NET从DB读取数据

时间:2013-04-21 13:27:32

标签: asp.net sql-server

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

这是我的代码:

{
    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 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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

答案 2 :(得分:1)

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

答案 3 :(得分: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
}