0

大学のスタッフの詳細を含むユーザー (tblUsers) のテーブルがあります。選択したモジュールに関連付けられている講師の名前をテキスト ボックスに入力しようとしています。

特定のモジュールに関連付けられているすべての UserID を取得して、ユーザーが講師であるかどうかをテストしています。講師である場合は、ID を ArrayList に追加します。

次に、この配列を反復処理し、現在の ID を通過する各反復中に以下のメソッドを呼び出します。

ただし、以下のメソッドを見ると、私は SqlDataReader を使用しており、次の行で読み取り中にエラーが発生しています。

txtLecturerName.Text += myReader["First_Name"].ToString();

エラー メッセージ: 'myReader["First_Name"]' が 'System.IndexOutOfRangeException' 型の例外をスローしました

私が使用しているテーブル レイアウトは、メソッド コードの下にあります。これについての助けがあれば大歓迎です。私は一杯のコーヒーで頭を画面から遠ざけることができます。

public void outputLecturerNames(string lecturerID)
{
    // Create a new Connection object using the connection string
    SqlConnection myConnection = new SqlConnection(conStr);

    // If the connection is already open - close it
    if (myConnection.State == ConnectionState.Open)
    {
        myConnection.Close();
    }

    // 'using' block allows the database connection to be closed
    // first and then the exception handling code is triggered.
    // This is a better approach than using a 'finally' block which
    // would close the connection after the exception has been handled.
    using (myConnection)
    {
        try
        {
            // Open connection to DB
            myConnection.Open();

            SqlCommand selectCommand = new SqlCommand(selectQuery, myConnection);

            // Declare a new DataReader
            SqlDataReader myReader;

            selectQuery = "SELECT * FROM tblUsers WHERE User_ID='";
            selectQuery += lecturerID + "'";

            myReader = selectCommand.ExecuteReader();

            while (myReader.Read())
            {
                txtLecturerName.Text += myReader["First_Name"].ToString();
                txtLecturerName.Text += " ";
                txtLecturerName.Text += myReader["Last_Name"].ToString();
                txtLecturerName.Text += " , ";
            }
            myReader.Close();
        }
        catch (Exception err)
        {
            Console.WriteLine("Error: " + err);
        }
    }
}

tblUsers:

[User_ID][First_Name][Last_Name][Email_Address]
4

3 に答える 3

3

このメソッドでは、変数selectQueryは宣言されておらず、tblUsersでクエリ文字列が割り当てられる前に、SqlCommandのパラメーターとして使用されます。

于 2010-07-20T17:05:44.197 に答える
0

列名のスペルが間違っている可能性があります。

一般的には、絶対に書いてはいけませんSELECT * FROM ...
代わりに、必要な列のみを選択する必要があります。

これにより、必要な情報のみを照会することでプログラムの実行が高速になり、より適切なエラー メッセージが生成されます。

于 2010-07-20T16:53:38.590 に答える
0

このエラーは、指定された列名が見つからない場合に発生します。あなたが私のような人であれば、おそらく何度かチェックしたことでしょうが、テーブル名は正しいですか (正しいデータベース、正しいスキーマ)、そして列名は正しいですか?

http://msdn.microsoft.com/en-us/library/f01t4cfy.aspx

テーブルの名前を完全に修飾してみてください (database.dbo.tblUsers)。これにより、自分が思っているテーブルに確実にヒットすることができます。また、列の名前を SQL ステートメントに入れてみてください。それらが正しくない場合、SQL ステートメントは正しく実行されません。

于 2010-07-20T16:55:29.530 に答える