那里有新问题。在从数据库读取数据时以及当记录用完时,它只是说“当没有数据存在时无效尝试读取”,所以问题是如何防止这种情况?
这是我的代码:
{
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();
}
}
答案 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
}