0

ユーザーに自分の本の検索条件を選択してもらいたいのですが、ここにコードがあります。提案をお願いします!!

String keyword=Textbox1.Text; //User types keyword
String userCriteria=Textbox2.Text;// Can be Title, Author, Subject or ISBN;

String sql="Select * from tableBooks WHERE '"+keyword+"' like '%"+userCriteria+"'%";

ユーザーがデータベースを検索するための独自の基準を選択できるようにする方法は?

4

2 に答える 2

0

確かに、クエリを作成するためのより良い方法が必要です。特定の手段でチェックまたはフィルタリングせずにユーザーから直接入力を取得して、クエリに入力することはありません。これにより、アプリケーションが SQL インジェクションにさらされることになります。SQL パラメータを使用します。このリンクを参考にしてみてください: http://www.dotnetperls.com/sqlparameter

例 :

 using (SqlCommand command = new SqlCommand("Select * from tableBooks WHERE @Field LIKE @Value", connection))
        {
        //
        // Add new SqlParameter to the command.
        //
        command.Parameters.Add(new SqlParameter("Field", Textbox1.Text)); // I do not recommend using a textbox and letting the user write anything. You have to limit his choices by the fields in your table. Use a dropdownlist and limit his choices by meaningful fields in your "tableBooks" table.
        command.Parameters.Add(new SqlParameter("Value", Textbox2.Text));
        //
        // Read in the SELECT results.
        //
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            //GET YOUR BOOK
        }
        }

私のコメントに注意してください:

// テキストボックスを使用して、ユーザーに「キーワード」として何かを書かせることはお勧めしません。テーブルの列によって彼の選択を制限する必要があります。ドロップダウンリストを使用して、「tableBooks」テーブルから意味のある選択肢を選択することで、彼の選択肢を制限します。

于 2013-07-08T09:53:24.117 に答える
0

パラメータ化されたクエリを使用する方が、既に使用しているフォームよりも安全です。これを試すことができます。役立つと思います

// Declare a connection
            conn =  new 
                SqlConnection("Server=.;DataBase=DataBase;Integrated Security=SSPI");
            conn.Open();

            //Create parameterized query
            SqlCommand cmd = new SqlCommand(
                "Select * from tableBooks WHERE (case @userCriteria when 'Title' then Title when 'Author' then Author when 'Subject' then Subject when 'ISBN' then ISBN else '' end)  LIKE '%'+@keyword+ '%'", conn);
            //Create parameter userCriteria
            SqlParameter param  = new SqlParameter();
            param.ParameterName = "@userCriteria";
            param.Value         = userCriteria;
            //Create parameter keyword
            SqlParameter param  = new SqlParameter();
            param.ParameterName = "@keyword";
            param.Value         = userCriteria;

            // add new parameter to command object
            cmd.Parameters.Add(param);

            // get data stream
            reader = cmd.ExecuteReader();

            // write each record
            while(reader.Read())
            {
                //Get data
            }
于 2013-07-08T15:03:19.833 に答える