0

私はスタックした1つの問題があり、それに対する解決策を見つけることができません、ひどくあなたの助けが必要です:実際、私は女性であるすべての従業員を検索する必要があるように、従業員テーブルで何らかの検索を行う必要がありますphdなどを取得し、if条件を使用して従業員テーブルをクエリする関数を作成しました。この検索の結果はグリッドビューに表示され、allowpagingがtrueになります。問題は、[次へ]をクリックしてグリッドビューの他のページに移動することです。完全なポストバックを実行し、gridviewデータソースに再度バインドします。gridviewデータソースに以下の関数(DetailedSearch)を指定すると、関数に入ると、特定のif条件に移動せずに、最初のif条件で読み取りを開始します。例外をスローしますオブジェクト参照がオブジェクト インスタンスに設定されていません

これが私のコードです(完全なコードではなく、その一部です):

    public DataTable DetailedSearch()
    {
        con.Open();
        SqlDataAdapter da=new SqlDataAdapter();


         if (FirstName != string.Empty)
         {
             if (FirstName != string.Empty && LastName != "--Letters--")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'"+"and lastname like '"+LastName.ToString()+"%'", con);
             }
             else if(FirstName!=string.Empty && Gender!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and gender='" + Gender.ToString() + "'", con);

             }
             else if(FirstName!=string.Empty && MaritalStatus!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and maritalstatus='" + MaritalStatus.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && Qualification!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and qualification='" + Qualification.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && GraduationDate!=DateTime.MinValue)
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and graduationdate='" + GraduationDate.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && Province!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and province='" + Province.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && LastEmployer!=string.Empty)
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and lastemployer='" + LastEmployer.ToString() + "'", con);
             }
            else if(FirstName!=string.Empty && EnteredBy!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and enteredby='" + EnteredBy.ToString() + "'", con);
             }
             else if (FirstName != string.Empty && DateEntered != DateTime.MinValue)
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and dateentered='" + DateEntered.ToString() + "'", con);
             }
             else
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'", con);
             }
         }
         else if (LastName != "--Letters--")
         {
                if (LastName != "--Letters--" && Province != "{Please Select}")
                 {
                     da = new SqlDataAdapter("select * from employee where lastname like'" + LastName.ToString() + "%'" + "and province='" + Province.ToString() + "'", con);
                 }
                else if (Gender != "{Please Select}" && LastName != "--Letters--")
                {
                    da = new SqlDataAdapter("select * from employee where gender='" + Gender.ToString() + "'" + "and lastname like '" + LastName.ToString() + "%'", con);
                }
        DataTable dt = new DataTable();
        da.Fill(dt);
        con.Close();
        return dt;

    }

完全に空白であり、ロジックが頭に浮かばないので、何をすべきかを教えてください。クエリが検索に基づいて同じではない可能性があるため、if句を配置する必要がありますが、gridviewページングにこれを認識させる方法:(

前もって感謝します

4

1 に答える 1

0

本当に、そのコードには改善できることがたくさんあります...

  1. あなたはFirstName != string.Empty繰り返しやっていますが、最初のifですでにテストしています。
  2. シングルに変えた方がいいif(!String.IsNullOrEmpty(FirstName))
  3. SQL インジェクションの可能性を回避するため、文字列連結の代わりにSQL パラメータを使用する必要があります。
  4. 「選択してください」など、フィールドのデフォルトのユーザー インターフェイスを渡すべきではありません。デフォルト値が選択されている場合は、null または空の値を渡します

これは具体的な回答や質問ではありませんが、良いガイダンスです。実際、これらの変更を適用しようとすると、その過程で問題が解決することさえあります。

于 2012-08-11T03:49:56.300 に答える