1

現在コードを修正していて、検索機能を追加しています..しかし、デバッグすると、何かがうまくいかず、エラーが表示されます。

これが私のコードです:

public ViewResult Index(string currentFilter, string searchString, int? page) {
    if(Request.HttpMethod=="GET") {
        searchString=currentFilter;
    }
    else {
        page=0;
    }

    ViewBag.CurrentFilter=searchString;

    var connString=ConfigurationManager.ConnectionStrings["ApplicantDB"].ConnectionString;
    List<Applicant> instructors=new List<Applicant>();

    using(var conn=new SqlConnection(connString)) {
        conn.Open();

        var query=new SqlCommand(
            "SELECT TOP 50 APPLICANT_ID, APPLICANT_Lastname, APPLICANT_FirstName, APPLICANT_MiddleName, APPLICANT_Address, APPLICANT_City"+
            " FROM APPLICANT", conn);

        var reader=query.ExecuteReader();

        int currentPersonID=0;
        Applicant currentInstructor=null;

        while(reader.Read()) {
            var personID=Convert.ToInt32(reader["APPLICANT_ID"]);

            if(personID!=currentPersonID) {
                currentPersonID=personID;

                if(currentInstructor!=null) {
                    instructors.Add(currentInstructor);
                }

                currentInstructor=new Applicant();
                currentInstructor.APPLICANT_ID=Convert.ToInt32(reader["APPLICANT_ID"].ToString());
                currentInstructor.APPLICANT_Lastname=reader["APPLICANT_Lastname"].ToString();
                currentInstructor.APPLICANT_FirstName=reader["APPLICANT_FirstName"].ToString();
                currentInstructor.APPLICANT_MiddleName=reader["APPLICANT_MiddleName"].ToString();
                currentInstructor.APPLICANT_Address=reader["APPLICANT_Address"].ToString();
                currentInstructor.APPLICANT_City=reader["APPLICANT_City"].ToString();
            }

        }

        if(!String.IsNullOrEmpty(searchString)) {
            currentInstructor=
                instructors.Where(
                    s => 
                        s.APPLICANT_Lastname.ToUpper().Contains(searchString.ToUpper())
                        ||
                        s.APPLICANT_FirstName.ToUpper().Contains(searchString.ToUpper())
                    ).FirstOrDefault();

            currentInstructor.APPLICANT_ID=Convert.ToInt32(reader["APPLICANT_ID"].ToString());
            currentInstructor.APPLICANT_Lastname=reader["APPLICANT_Lastname"].ToString();
            currentInstructor.APPLICANT_FirstName=reader["APPLICANT_FirstName"].ToString();
            currentInstructor.APPLICANT_MiddleName=reader["APPLICANT_MiddleName"].ToString();
            currentInstructor.APPLICANT_Address=reader["APPLICANT_Address"].ToString();
            currentInstructor.APPLICANT_City=reader["APPLICANT_City"].ToString();
        }

        if(currentInstructor!=null) {
            instructors.Add(currentInstructor);
        }

        reader.Close();
        conn.Close();
    }

    int pageSize=10;
    int pageNumber=(page??0);
    return View(instructors.ToPagedList(pageNumber, pageSize));
}

そして、エラーはこの行に表示されます..

データが存在しない場合の読み取りの試みは無効です。

説明:

現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細:

System.InvalidOperationException: データが存在しない場合の無効な読み取り試行。

currentInstructor=
    instructors.Where(
        s =>
            s.APPLICANT_Lastname.ToUpper().Contains(searchString.ToUpper())
            ||
            s.APPLICANT_FirstName.ToUpper().Contains(searchString.ToUpper())
        ).FirstOrDefault();

currentInstructor.APPLICANT_ID=Convert.ToInt32(reader["APPLICANT_ID"].ToString());
currentInstructor.APPLICANT_Lastname=reader["APPLICANT_Lastname"].ToString();
4

1 に答える 1