Я делаю генератор запросов SQLite в C# для проекта таймера по пересеченной местности. Он генерирует запросы в соответствии с информацией, которую вы выбираете в ComboBoxes.C# SQL - Загрузка DataTable в DataGridView изменяет данные SQL-запроса
С самого начала моего проекта, я использую следующую функцию
private static DataTable ExecuteTableQuery(String query)
{
DataTable dt = new DataTable();
using (SQLiteCommand cmd = new SQLiteCommand(query, CONNECTION))
{
SQLiteDataReader reader = cmd.ExecuteReader();
dt.Load(reader);
return dt;
}
}
для того, чтобы установить DataSource мой DataGridView формы.
Но, чем сложнее мои сгенерированные запросы, тем больше я начал сталкиваться с нечетными ситуациями.
Пример запроса:
SELECT "No. Arrived", "Status", "Time", "Time Total", "No. Runner" // [A]
FROM (
SELECT `Runner_no` AS "No. Runner", // Runner_no is a PK
`Result_time` AS "Time",
`Result_totaltime` AS "Time Total",
`Result_status` AS "Status",
`Result_registered` AS "No. Arrived" // Result_registered is a PK
// [B]
FROM `Result`, `Runner`, `City`
WHERE `Runner_City_id` = `City_id` // City_id is a PK
AND `Result_id` = `Runner_no`
AND (`Runner_gender` = "F" OR `Runner_gender` = "M")
AND (`Result_status` = "hurt" OR `Result_status` = "disq" OR `Result_status` = "OK")
UNION // Some people may have not reached the finish line.
SELECT `Runner_no` AS "No. Runner",
NULL AS "Time",
NULL AS "Time Total",
NULL AS "Status",
NULL AS "No. Arrived"
FROM `Result`, `Runner`, `City`
WHERE `Runner_City_id` = `City_id`
AND `Runner_no` NOT IN (SELECT `Result_id` FROM `Result`)
AND (`Runner_gender` = "F" OR `Runner_gender` = "M")
GROUP BY "Runner_no"
)
ORDER BY "No. Arrived" ASC
Пожалуйста, обратите внимание, что мое приложение сделано для создания переменных запросов SQL, так что это нормально для моего примера смотреть упрощаемый.
МОЕЙ ПРОБЛЕМА: Большая часть времени (я думаю), когда мои сгенерированные запросы имеют первичные ключи в некоторых пунктах (например, в моем примере), некоторые результаты опущены, упорядочение пренебрегает, а иногда, выбрав другую строку [A] может заставить запрос работать снова.
В моем примере: No. Arrived
столбец не упорядочен, некоторая строка исчезает и добавление столбца City_id
в [A] и [B] решает все.
NOTA BENE: В любом запросе, создаваемом моим приложением, нет никаких ошибок. Выполнение их в любом внешнем программном обеспечении SQLite (например, http://sqlitebrowser.org/) всегда успешное.
МОИ ВОПРОСЫ: Почему это происходит, когда я загружаю данные в DataTable? Как я могу избежать этого? Как я могу получить в C# тот же результат, который я бы получил, используя программное обеспечение на базе C++, такое как SQLiteBrowser?
если мой ответ sati вы хотите, отметьте это как ответ –