C# обучение

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.
  • Дата: 2016-02-10 01:42:42
  • Курс: БД - Управление гостиницей
  • Урок: Модель. Список заказов.
  • Заголовок: Ошибка при поиске с фильтром в бд
  • Описание проблемы:
    Возникает при поиске кириллицей - "illegal mix of collations for operation like". Проверил - кодировка везде нормальная (utf8_general_ci) Вообще это скорее всего из-за типа DateTime, но исключать его из поиска не хочется, вдруг надо будет по дате искать. И у Витольдовича все работает. Также безуспешно применял такe. функцию "LIKE CONVERT('%Что-то для поиска%' USING utf8)"
  • Когда появилась проблема: БД-управление отелем, урок 27. Написали методы для sql-запросов к таблице Book. Метод " public DataTable SelectBooks(string find)" выдает ошибку, если принимает кириллицу. С кодировкой уже все нормально, но запрос не проходит.
image


image




  • Сохранить страницу:


3664. --
данила
данила
ответить
→  Кирилл Шмойлов  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-12 12:35

Может % там и не нужен, но на ошибку это не влияет


6452. --
Кирилл Шмойлов
Кирилл Шмойлов
ответить
→  данила  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-12 11:44

чтобы тебе совсем не думать, скидываю код
                book = this.sql.Select(
                    "select client_id, client, book_date, from_day, till_day," +
                            " adults, childs, status, b.info" +
                    " from book b" +
                    " left join client c on b.client_id=c.id" +
                    " where " +
                    "    client like '%" + f + "%'" +
                    " or book_date like '%" + f + "%'" +
                    " or from_day like '%" + f + "%'" +
                    " or till_day like '%" + f + "%'" +
                    " or adults like '" + f + "'" +
                    " or childs like '" + f + "'" +
                    " or status like '" + f + "'" +
                    " or b.info like '%" + f + "%'" +
                    " order by book_date" +
                    "");
обращаю ЕЩЁ РАЗ твоё внимание на сравнение с ЧИСЛОВЫМИ полями, в них не добавляется знак %.
удачи!


3664. --
данила
данила
ответить
→  Frank  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-11 13:12

открыл, добавил, не помогло


5565. --
Frank
Frank
ответить
→  данила  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-11 12:56

Еще один совет - попробуй в поиске ввести, не так like '%Что-то для поиска%', а вот так like '%то-то для поиска%'
Без верхнего регистра + половина слова кароче. Так как ты используешь два процента, очень глупо искать слово целиком , естественно будет выходить ошибка. Попробуй и после напиши
Удачи


5565. --
Frank
Frank
ответить
→  данила  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-11 12:44

Возможно при установке ты не настраивал кодировку, если так то
Открой конфиг mysql - my.ini И добавь [mysqld] character-set-server = utf8



2146. --
Иван
Иван
ответить
→  данила  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-10 20:55

Уверен, что удастся разобраться с ошибкой.


3664. --
данила
данила
ответить
→  Кирилл Шмойлов  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-10 18:28

Когда сравниваешь с числом ошибки не возникает, просто результат сравнения false - проверено.
Все из-за типа DateTime, но если его исключить, то по дате нельзя будет искать. В уроке ведь точно также все с числами и с датой работает


6452. --
Кирилл Шмойлов
Кирилл Шмойлов
ответить
→  данила  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-10 17:19

всё понятно, я нашел ошибку
у тебя идет сравнение  числа и текста
когда ты сравниваешь STATUS (это текст) и "Русские буквы" это нормально
а когда ты сравниваешь Till_Day (это дата) и "Русские буквы" - это ошибка
когда ты сравниваешь Adults (это число) и "Русские буквы" - это тоже ошибка


3664. --
данила
данила
ответить
→  Кирилл Шмойлов  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-10 13:39

Посмотрел, стоит:
  this.connectionString =
                "SERVER=" + host +
                ";DATABASE=" + baze +
                ";UID=" + user +
            // ";PASSWORD=" + pass +
                ";CHARSET=utf8;";


6452. --
Кирилл Шмойлов
Кирилл Шмойлов
ответить
→  данила  # БД - Управление гостиницей / Модель. Список заказов. / 2016-02-10 04:04

при подключении к базе в методе подключения у тебя стоит utf8 ?
        public MySQL(string connect1)
        {
            connect = connect1 + "charset=utf8;";
        }

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Огромное спасибо за вашу работу! Все красиво и доступно, мнение только положительное.Желаю только успехов и чтобы проект развивался и процветал в будущем. С уважением Кірпа Роман


Научился:  Создавать ASP.NET MVC проекты, работать с базами данных, выполнять SQL запросы. Выводить список историй, добавлять ссылки на страницы Оформлять сайт с использованием bootstrap
Трудности: Размещение проекта в Интернете
Уроки отличные, спасибо авторам: Евгению Витольдовичу и Валерию Жданову