簡體   English   中英

為什么我得到System.IndexOutOfRangeException

[英]Why am I getting System.IndexOutOfRangeException

我還有另外兩個按鈕,它們的代碼幾乎完全相同。 但是,當我嘗試運行此代碼以獲取所有結果時,出現錯誤“ System.IndexOutOfRangeException”。

“顯示無效的NHS編號”按鈕有效,但我看不到為什么會起作用,但“顯示所有記錄”按鈕無效。 錯誤在下面的代碼塊的dgvResults部分中,而不是在第一個代碼塊中。

 private void cmdShowInvalidNHSnumbers_Click(object sender, EventArgs e)
    {
        string databaseFilename;
        string sql;

        dgvResults.ColumnCount = 3;
        dgvResults.Columns[0].Name = "NHSNumber";
        dgvResults.Columns[1].Name = "Patient";
        dgvResults.Columns[2].Name = "Problem";

        dgvResults.Rows.Clear();

        databaseFilename = Application.StartupPath + "\\nhsnumberchecker.db";

        System.Data.SQLite.SQLiteConnection m_dbConnection;
        m_dbConnection = new System.Data.SQLite.SQLiteConnection("Data Source=" + databaseFilename + ";Version=3;");
        m_dbConnection.Open();

        sql = @"
        SELECT * FROM results
        -- WHERE NHSNumber = 'N'
        WHERE NHSNumberValid = 'N'
        ORDER BY Surname;";

        System.Data.SQLite.SQLiteCommand command = new System.Data.SQLite.SQLiteCommand(sql, m_dbConnection);

        System.Data.SQLite.SQLiteDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            dgvResults.Rows.Add(reader["NHSNumber"], reader["Surname"] + ", " + reader["GivenName"], NHSnumberError(reader.GetString(0)));
        }

        dgvResults.Refresh();
        dgvResults.AutoResizeColumns();
        m_dbConnection.Close();
    }







 private void cmdShowAllResults_Click(object sender, EventArgs e)
    {
        string databaseFilename;
        string sql;

        dgvResults.ColumnCount = 7;
        dgvResults.Columns[0].Name = "NHSNumber";
        dgvResults.Columns[1].Name = "DOB";
        dgvResults.Columns[2].Name = "Title";
        dgvResults.Columns[3].Name = "Surname";
        dgvResults.Columns[4].Name = "GivenName";
        dgvResults.Columns[5].Name = "Gender";
        dgvResults.Columns[6].Name = "Problem";

        dgvResults.Rows.Clear();

        databaseFilename = Application.StartupPath + "\\nhsnumberchecker.db";

        System.Data.SQLite.SQLiteConnection m_dbConnection;
        m_dbConnection = new System.Data.SQLite.SQLiteConnection("Data Source=" + databaseFilename + ";Version=3;");
        m_dbConnection.Open();

        sql = @"
        SELECT * FROM results
        ORDER BY Surname;";

        System.Data.SQLite.SQLiteCommand command = new System.Data.SQLite.SQLiteCommand(sql, m_dbConnection);

        System.Data.SQLite.SQLiteDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            dgvResults.Rows.Add(reader["NHSNumber"], reader["DOB"], reader["Title"], reader["Surname"] + ", " + reader["GivenName"],
                reader["Gender"], reader["Problem"], NHSnumberError(reader.GetString(0))); //This section is causing the error
        }

        dgvResults.Refresh();
        dgvResults.AutoResizeColumns();
        m_dbConnection.Close();
    }
}

代碼的下半部分是獲取錯誤消息的代碼。 我不知道其中的哪一部分“超出范圍”。

也許您的查詢結果包含一個“,”字符。 嘗試通過添加替換方法來修改所有條目,以查看是否正確:

dgvResults.Rows.Add(reader["NHSNumber"].Replace("," , "") , ............

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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