簡體   English   中英

C#代碼未執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM