2013-04-21 164 views
3

出現新問題。在從數據庫中讀取數據時以及在記錄用完時,它只會顯示「無數據時無法讀取」,所以問題是如何防止這種情況發生?ASP.NET從數據庫讀取數據

這裏是我的代碼:

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

}

回答

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

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 
} 
+0

謝謝你們,這解決了這個問題。 – 2013-04-21 13:39:55