3

私は非常に奇妙な問題を抱えており、これを取り除く方法がわかりません。

プロジェクトの事前検索が1つあります。基本的には、学校検索です。

私の問題はLIKE、オプションを比較するために使用していることです。検索の最後に、クエリは次のようになります。

select *
from tbl_schooldetails
where
  state = 'Gujarat'
  and city = 'Ahmedabad'
  and area = 'Navrangpura'
  and ( board = 'xx' or board LIKE '%CBSE Board%' or board LIKE '%Gujarat Board%')

しかし、代わりに私はこれを以下のクエリで取得します:

select *
from tbl_schooldetails
where
  state = 'Gujarat'
  and city = 'Ahmedabad'
  and area = 'Navrangpura'
  and ( board = 'xx' or board LIKE '�SE Board%' or board LIKE '%Gujarat Board%')

%CB私が「�」記号に変換されていることに気付いた場合、 「CBSEボード」オプションに関連する結果を検索できません。

誰かがこのURLエンコーディングを取り除く方法を教えてもらえますか?

これは、このクエリが生成される場所からの私のコードです。

  string qry = "select * from tbl_schooldetails where state = '" + sdpd4.SelectedItem.Text + "'";

    if (sdpd2.SelectedItem.Text != "Select City")
    {
        qry += " and city = '" + sdpd2.SelectedItem.Text + "'";
    }

    if (sdpd1.SelectedItem.Text != "Select Area")
    {
        qry += " and area = '" + sdpd1.SelectedItem.Text + "'";
    }

    if (CheckBoxList3.SelectedItem != null)
    {
        qry = qry + " and ( board = 'xx'";

          for (int i = CheckBoxList3.Items.Count - 1; i >= 0; i--)
          {
              if (CheckBoxList3.Items[i].Selected == true)
              {

                  string mt = CheckBoxList3.Items[i].ToString();
                  qry = qry + " or board LIKE '" + '%' + mt + '%' + "'";

              }
          }
            qry = qry + ")";
    }


    if (RadioButtonList1.SelectedItem != null)
    {
        qry += " and gender ='" + RadioButtonList1.SelectedItem.Text + "'";
    }



    Response.Redirect("schoolsearchresult2.aspx?search=" + qry);
4

2 に答える 2

4

元の質問がより明確になったため、編集されました。

これを変更するだけです:

Response.Redirect("schoolsearchresult2.aspx?search=" + qry);

これに:

Response.Redirect("schoolsearchresult2.aspx?search=" 
    + HttpServerUtility.UrlEncode(qry));

...しかし:私の警告 (および他のすべての警告) は正しいままです: クエリ文字列に WHERE 句を渡すことは非常に危険です。結果の URL を少し調整すると、データベースが破壊される可能性があります。

元の答え

サーバー上で 16 進数として解釈される %CB を URL に入れているようです。

%25CB を使用する場合は、「%CB」と解釈する必要があります。

または、組み込みの c# 関数の 1 つを使用することもできます。必要なのはHttpServerUtility.UrlEncodeだと思います。

非常に重要:

これが実際のアプリケーションであり、概念実証プロジェクトではない場合、URL から直接 SQL 文字列にデータをコピーしてはなりません。

于 2012-07-26T21:46:15.077 に答える
0

この方法で SQL クエリを作成することをお勧めします。そうすれば、URL エンコーディングと Sql インジェクションについて心配する必要がなくなります。

string sqlQuery = "select *
from tbl_schooldetails
where
  state = @state
  and city = @city
  and area = @area
  and ( board = @board1 or board LIKE ";
 sqlQuery += "%@board2%";
sqlQuery += " or board LIKE %@board3%");

そして、クエリを実行するときに使用します

例えば

SqlCommand cmd = new SqlCommand(command);
cmd.Parameters.AddWithValue("@state", Request.Form["state"]);

...... 等々

于 2012-07-26T21:55:53.377 に答える