Запрос работает в mysql, но не из c# кода - PullRequest
1 голос
/ 09 апреля 2020

У меня c# код, подобный следующему:

using (MySqlConnection con = new MySqlConnection(AR.ConnectionString))
{
    con.Open();
    using (MySqlCommand cmd = new MySqlCommand(@"SELECT PORUDZBINAID, USERID, BRDOKKOM, DATUM,
                STATUS, MAGACINID, PPID, INTERNIKOMENTAR, REFERENT_OBRADE, NACIN_PLACANJA, TAG FROM 
                PORUDZBINA WHERE TAG LIKE '%@MOB%'", con))
    {
        cmd.Parameters.AddWithValue("@MOB", Mobilni);

        MySqlDataReader dr = cmd.ExecuteReader();

        while (dr.Read())
            list.Add(new Porudzbina()
            {
                PorudzbinaID = Convert.ToInt32(dr[0]),
                UserID = Convert.ToInt32(dr[1]),
                BrDokKom = Convert.ToInt32(dr[2]),
                Datum = Convert.ToDateTime(dr[3]),
                Status = (PorudzbinaStatus)Convert.ToInt32(dr[4]),
                MagacinID = Convert.ToInt32(dr[5]),
                PPID = (dr[6] is DBNull) ? (int?)null : Convert.ToInt32(dr[6]),
                InterniKomentar = (dr[7] is DBNull) ? null : dr[7].ToString(),
                ReferentObrade = (dr[8] is DBNull) ? (int?)null : Convert.ToInt32(dr[8]),
                NacinUplate = (PorudzbinaNacinUplate)Convert.ToInt32(dr[9]),
                Tag = JsonConvert.DeserializeObject<Properties>(dr["TAG"].ToString())
            });
    }
}

Я поставил точку останова, и она передает хороший параметр для запроса, но не вводит while() l oop (поэтому я не читаю ) и он не возвращает строк.

Когда я ввожу тот же запрос в мой mysql и заменяю @MOB на параметр, переданный туда, он возвращает мне одну строку.

Я думаю, проблема в том, что-то с передачей LIKE через c#, но не уверен, почему это происходит.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Вам нужно немного изменить способ добавления параметров:

В вашем SQL нет кавычек и символов%.

using (MySqlCommand cmd = new MySqlCommand(@"SELECT PORUDZBINAID, USERID, BRDOKKOM, DATUM,
                STATUS, MAGACINID, PPID, INTERNIKOMENTAR, REFERENT_OBRADE, NACIN_PLACANJA, TAG FROM 
                PORUDZBINA WHERE TAG LIKE @MOB", con))
    {

Тогда такой параметр, без кавычек .

cmd.Parameters.AddWithValue("@MOB", "%" + Mobilni + "%");

Кстати: в идеале не следует использовать AddWithValue, а только Add (). Смотрите этот блог: https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

И этот пост SO: MySqlCommand Command.Parameters.Add устарел

Вместо этого он должен выглядеть следующим образом: это:

cmd.Parameters.Add("@MOB", SqlDbType.Varchar).Value = "%" + Mobilni + "%";
//you must update to use the correct DBType for your data
0 голосов
/ 09 апреля 2020

Поскольку @MOB находится внутри одинарных кавычек, он интерпретируется как строковый литерал, который вы не имели в виду. Вы можете исправить это путем объединения заполнителя с символами %:

using (MySqlCommand cmd = new MySqlCommand(
    @"SELECT PORUDZBINAID, USERID, BRDOKKOM, DATUM, STATUS, MAGACINID, PPID, INTERNIKOMENTAR, REFERENT_OBRADE, NACIN_PLACANJA, TAG 
      FROM PORUDZBINA 
      WHERE TAG LIKE CONCAT('%', @MOB, '%')", con))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...