Преобразование запроса к базе данных из SQL в SQLite ⇐ C#
-
Гость
Преобразование запроса к базе данных из SQL в SQLite
У меня есть HMI панели процессов ABB, который использует некоторые фоновые сценарии C# для экспорта сигналов тревоги на основе диапазона дат из базы данных в файл CSV. Недавно вышла новая версия панели, в которой самое большое изменение заключается в том, что новая панель использует SQLite вместо SQL. Новое программное обеспечение дизайнера «преобразовало» все в новый формат панелей, но мы обнаружили, что генерация csv не работает
Это исходный код запроса к базе данных:
// Если пользовательский диапазон не выбран, используйте последние X дней, как определено тегом LogDaysRange: еще { StartDateTime = DateTime.Now.AddDays(-1 * Globals.Tags.LogDaysRange.Value).ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); EndDateTime = DateTime.Now.ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); } // Использование try/catch для предотвращения сбоя, если что-то пойдет не так. пытаться { // Это команда sql, которую нужно выполнить. Получите все данные из данной таблицы с заданными параметрами запроса: sqlString = (@"SELECT ActiveTime, InActiveTime, Text, AlarmItemDisplayName FROM AlarmServer WHERE ActiveTime BETWEEN '" + StartDateTime + @"' AND '" + EndDateTime + @"' ORDER BY ActiveTime DESC"); // Создайте адаптер данных для выполнения запроса и получения данных. // Он использует переменную соединения. SqlCeDataAdapter sqlCeDataAdapter = новый SqlCeDataAdapter (sqlString, m_SqlConnection); // Инициализируем набор данных, который используется для хранения результата. dataSet = новый DataSet(); // Заполняем DataSet результатом адаптера данных. sqlCeDataAdapter.Fill(набор данных); } В строке «sqlString» я удалил текст после WHERE (и изменил «sqlCE» на «SQLite»), и код работал над созданием файла csv и экспортом всех сигналов тревоги в csv. Вот как это выглядит сейчас:
// Если пользовательский диапазон не выбран, используйте последние X дней, как определено тегом LogDaysRange: еще { StartDateTime = DateTime.Now.AddDays(-1 * Globals.Tags.LogDaysRange.Value).ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); EndDateTime = DateTime.Now.ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); } // Использование try/catch для предотвращения сбоя, если что-то пойдет не так. пытаться { // Это команда sql, которую нужно выполнить. Получите все данные из данной таблицы с заданными параметрами запроса: sqlString = string.Format(@"SELECT ActiveTime, InActiveTime, Text, AlarmItemDisplayName FROM AlarmServer"); Однако функция выбора диапазона дат по-прежнему необходима. Все, что я пытался добавить в WHERE и BETWEEN, не работает, включая запись прямых дат, таких как «2023-09-19» и «2023-09-16».
Я надеялся, что кто-нибудь укажет мне правильное направление, как заставить запрос работать.
У меня есть HMI панели процессов ABB, который использует некоторые фоновые сценарии C# для экспорта сигналов тревоги на основе диапазона дат из базы данных в файл CSV. Недавно вышла новая версия панели, в которой самое большое изменение заключается в том, что новая панель использует SQLite вместо SQL. Новое программное обеспечение дизайнера «преобразовало» все в новый формат панелей, но мы обнаружили, что генерация csv не работает
Это исходный код запроса к базе данных:
// Если пользовательский диапазон не выбран, используйте последние X дней, как определено тегом LogDaysRange: еще { StartDateTime = DateTime.Now.AddDays(-1 * Globals.Tags.LogDaysRange.Value).ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); EndDateTime = DateTime.Now.ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); } // Использование try/catch для предотвращения сбоя, если что-то пойдет не так. пытаться { // Это команда sql, которую нужно выполнить. Получите все данные из данной таблицы с заданными параметрами запроса: sqlString = (@"SELECT ActiveTime, InActiveTime, Text, AlarmItemDisplayName FROM AlarmServer WHERE ActiveTime BETWEEN '" + StartDateTime + @"' AND '" + EndDateTime + @"' ORDER BY ActiveTime DESC"); // Создайте адаптер данных для выполнения запроса и получения данных. // Он использует переменную соединения. SqlCeDataAdapter sqlCeDataAdapter = новый SqlCeDataAdapter (sqlString, m_SqlConnection); // Инициализируем набор данных, который используется для хранения результата. dataSet = новый DataSet(); // Заполняем DataSet результатом адаптера данных. sqlCeDataAdapter.Fill(набор данных); } В строке «sqlString» я удалил текст после WHERE (и изменил «sqlCE» на «SQLite»), и код работал над созданием файла csv и экспортом всех сигналов тревоги в csv. Вот как это выглядит сейчас:
// Если пользовательский диапазон не выбран, используйте последние X дней, как определено тегом LogDaysRange: еще { StartDateTime = DateTime.Now.AddDays(-1 * Globals.Tags.LogDaysRange.Value).ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); EndDateTime = DateTime.Now.ToString(@"гггг/ММ/дд ЧЧ:мм:сс"); } // Использование try/catch для предотвращения сбоя, если что-то пойдет не так. пытаться { // Это команда sql, которую нужно выполнить. Получите все данные из данной таблицы с заданными параметрами запроса: sqlString = string.Format(@"SELECT ActiveTime, InActiveTime, Text, AlarmItemDisplayName FROM AlarmServer"); Однако функция выбора диапазона дат по-прежнему необходима. Все, что я пытался добавить в WHERE и BETWEEN, не работает, включая запись прямых дат, таких как «2023-09-19» и «2023-09-16».
Я надеялся, что кто-нибудь укажет мне правильное направление, как заставить запрос работать.
Мобильная версия