параметризованный запрос с предложением where like - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь выполнить параметризованный запрос с предложением where, как будто я не получил никаких ошибок, но я не получаю данные, но когда я выполняю тот же запрос в sql server studio, я получаю правильный результат

что с ним не так?

последний вопрос в некоторых случаях, я бы не стал передавать один из этих параметров, как тогда, как избежать привязки этого параметра к запросу?

public void GetPatientInfoFilter()
{
    string connStr = ConfigurationManager.ConnectionStrings["SRJDconnstr"].ToString();
    string cmdStr = @"SELECT ID,
                                             DocNUM,
                                             NAM+' '+LFNAME as FirstLastName,
                                             FNAME,
                                             SEX,
                                             BIRTHDAY,
                                             PHONE,
                                             MOBILE,
                                             ADDRESS
                                  FROM SICK
                               WHERE DocNUM LIKE @DocNUM
                                    AND NAM+' '+LFNAME LIKE @FLNAME
                                    AND FNAME LIKE @FNAME";

    using (SqlConnection conn = new SqlConnection(connStr))
    using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
    {
        conn.Open();
        cmd.CommandText = cmdStr;
        cmd.CommandType = CommandType.Text;

        dtPatientInfo.Rows.Clear();
           cmd.Parameters.Add(new SqlParameter("@DocNUM", SqlDbType.VarChar,10)).Value = "%" + TB_DocNum.Text + "%";
            cmd.Parameters.Add(new SqlParameter("@FLNAME", SqlDbType.VarChar,200)).Value = "%" + TB_FirstLastName.Text + "%";
            cmd.Parameters.Add(new SqlParameter("@FNAME", SqlDbType.VarChar,100)).Value = "%" + TB_FatherName.Text + "%";


        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dtPatientInfo);
        dataGridView1.DataSource = dtPatientInfo;
    }
}

вот как я выполняю запрос в SSMS

SELECT ID,
                                                     DocNUM,
                                                     NAM+' '+LFNAME as FirstLastName,
                                                     FNAME,
                                                     SEX,
                                                     BIRTHDAY,
                                                     PHONE,
                                                     MOBILE,
                                                     ADDRESS
                                          FROM SICK
                                       WHERE DocNUM LIKE '%1%'
                                            AND NAM+' '+LFNAME LIKE '%sa%'
                                            AND FNAME LIKE '%b%'

1 Ответ

0 голосов
/ 05 октября 2018

Вы помещаете подстановочные знаки % в текстовые поля?Могу поспорить, что вы хотите это:

string cmdStr = 
    @"SELECT ID,
         DocNUM,
         NAM+' '+LFNAME as FirstLastName,
         FNAME,
         SEX,
         BIRTHDAY,
         PHONE,
         MOBILE,
         ADDRESS
     FROM SICK
     WHERE DocNUM LIKE '%' + @DocNUM + '%'
         AND NAM+' '+LFNAME LIKE '%' + @FLNAME + '%'
         AND FNAME LIKE '%' + @FNAME + '%'";

Вы также можете рассмотреть вопрос об удалении лидирующих подстановочных знаков и делать только совпадения «начинается с», поскольку то, что мы здесь имеем, предотвращает любую возможность любых индексов, помогающих этому запросу.

...