[英]C# Code Not Executing
我有一個帶有選項卡式界面的C#/ WPF應用程序,該程序的行為一直很奇怪。 在最初考慮到我的問題與TabControl有關之后,我現在認為它與眾不同,並且完全陷入困境。 以下方法只是應該從數據庫中提取一些數據並加載幾個WPF ComboBox。 奇怪的是,代碼到達了特定點,特別是循環的末尾,該循環加載了cboState的Item集合,然后繼續。 沒有執行放置在該循環下面的代碼,沒有拋出超出我所能看到或看到的錯誤,並且沒有到達放置在該循環下面的斷點。 我很困惑。
private void loadNewProjectTab() {
dpDate.SelectedDate = DateTime.Now;
cboProjectType.Items.Add("Proposal");
cboProjectType.Items.Add("Pilot");
cboProjectType.SelectedIndex = -1;
string sql = "SELECT State FROM States ORDER BY ID";
OleDbCommand cmd = new OleDbCommand(sql, connection);
if(connection.State == ConnectionState.Closed) {
connection.Open();
}
OleDbDataReader reader = cmd.ExecuteReader();
while(reader.HasRows) {
reader.Read();
cboState.Items.Add(reader["State"].ToString().Trim());
} // <-- Nothing below here executes.
connection.Close();
}
while(reader.HasRows) {
reader.Read();
cboState.Items.Add(reader["State"].ToString().Trim());
}
即使您已讀取所有行並使用reader.Read()
移到最后一行, reader.HasRows
仍將返回true。 到那時,您將在reader["State"]
上遇到異常。
由於reader.Read()
返回一個布爾值以指示是否存在當前行,因此您應該完全跳過對reader.HasRows
調用:
while(reader.Read()) {
cboState.Items.Add(reader["State"].ToString().Trim());
}
嗯,我認為您的循環應該錯了。
if (reader.HasRows)
{
while(reader.Read())
{
cboState.Items.Add(reader["State"].ToString().Trim());
}
}
請注意,氣泡在while(reader.Read())
這是你的問題:
while(reader.HasRows) {
reader.Read();
cboState.Items.Add(reader["State"].ToString().Trim());
}
HasRows
指示讀者是否檢索到任何內容; 當您通讀它時它不會改變(換句話說,它與您正在使用它的文件結尾指示符並不相似)。 相反,您應該這樣做:
while(reader.Read()) {
cboState.Items.Add(reader["State"].ToString().Trim());
}
Reader
應關閉。
using(var reader = cmd.ExecuteReader())
{
if(reader.HasRows)
{
while(reader.Read())
{
cboState.Items.Add(reader["State"].ToString().Trim());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.