2

私の webapp には、名または姓を使用してデータベースを検索できるように検索ボックスがあり、Web アプリに結果が表示されます。ユーザーは名または姓を入力します。姓のみで検索すると、表内のすべてのデータが表示され、姓のようなデータは表示されません

 string sql = @"SELECT opd_id AS [OPD No]
       , opd_date AS DATE
       , opd_dpt AS DEPARTMENT
       , opd_pfname + ' ' + opd_plname AS [Patient NAME]
       , opd_age AS AGE
       , opd_gender AS GENDER
       , opd_mob AS [MOBILE NO]
       , opd_fthrname AS [FATHER NAME]
       , opd_hsbndname AS [HUSBAND NAME]
       FROM tbl_OPD 
        WHERE opd_pfname like'%" + fname + @"%' 
        OR opd_plname like'%" + lname + @"% '
        ORDER BY DATE DESC";
4

2 に答える 2

2

余分な空白

OR opd_plname like'%" + lname + @"% '

空白^

また、準備されたSQLステートメントとパラメーターバインディングで修正できるSQLインジェクションに注意してください

于 2013-03-23T06:49:56.633 に答える
1

コードをさらに表示しないと、または変数のいずれかしか入力されていない可能性があります。これがこのコードを使用できるケースであると仮定します。fnamelname

// this assumes that you have only have 1 input for both the first name and lastname 
// and are storing it in a variable named searchForName
using (var connection = new SqlConnection("YOUR_CONFIGURATION_CONNECTION_STRING"))
{
    using (var command = new SqlCommand("SELECT opd_id AS [OPD No], opd_date AS DATE, opd_dpt AS DEPARTMENT, opd_pfname + ' ' + opd_plname AS [Patient NAME], opd_age AS AGE, opd_gender AS GENDER, opd_mob AS [MOBILE NO], opd_fthrname AS [FATHER NAME], opd_hsbndname AS [HUSBAND NAME] FROM tbl_OPD WHERE (opd_pfname like @p0 OR opd_plname like @p0) ORDER BY DATE DESC", connection))
    {
        command.Parameters.Add(new SqlParameter("@p0", string.Format("%{0}%", searchForName)));

        // rest of your code here E.G., sComm.ExecuteNonQuery();
    }
}

両方の変数が設定されていることがわかっている場合は、このコード ブロックを試してください

using (var connection = new SqlConnection("YOUR_CONFIGURATION_CONNECTION_STRING"))
{
    using (var command = new SqlCommand("SELECT opd_id AS [OPD No], opd_date AS DATE, opd_dpt AS DEPARTMENT, opd_pfname + ' ' + opd_plname AS [Patient NAME], opd_age AS AGE, opd_gender AS GENDER, opd_mob AS [MOBILE NO], opd_fthrname AS [FATHER NAME], opd_hsbndname AS [HUSBAND NAME] FROM tbl_OPD WHERE (opd_pfname like @p0 OR opd_plname like @p1) ORDER BY DATE DESC", connection))
    {
        command.Parameters.Add(new SqlParameter("@p0", string.Format("%{0}%", searchForFirstName)));
        command.Parameters.Add(new SqlParameter("@p1", string.Format("%{0}%", searchForLastName)));

        // rest of your code here E.G., sComm.ExecuteNonQuery();
    }
}

PS。他の人が言っているように、ここに示されているコードはやや安全ではなく、Sql インジェクション攻撃を避けるためにあらゆることを行う必要があります。

于 2013-03-23T06:51:58.480 に答える