Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по sqlite C#

фыав фыва Ученик (98), открыт 2 недели назад
Я захотел добавить в своего бота не только таблицу с информацией о юзерах но и промокоды. В итоге когда я хочу получить данные из второй таблицы с промокодами
 string sqlQuery = $"SELECT * FROM Promo WHERE promo = PROMO"; 
SQLiteDataAdapter main = new SQLiteDataAdapter(sqlQuery, connection);
main.Fill(dTable);
dtable просто не меняет свое значение хотя строка в таблице есть (смотрю с помощью программы) также если использовать этот фрагмент кода в Main функции все будет работать) Если кто то сталкивался с такой проблемой просьба рассказать как можно пофиксить
3 ответа
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (236420) 2 недели назад
В вашем SQL-запросе есть несколько проблем:

1. Основная ошибка в запросе - вы используете PROMO без кавычек, из-за чего SQLite воспринимает это как имя столбца, а не как строковое значение. Запрос должен выглядеть так:
 
string sqlQuery = $"SELECT * FROM Promo WHERE promo = '{promoValue}'";


Или лучше использовать параметризованный запрос для безопасности:
 
string sqlQuery = "SELECT * FROM Promo WHERE promo = @PromoCode";
using (SQLiteCommand command = new SQLiteCommand(sqlQuery, connection))
{
command.Parameters.AddWithValue("@PromoCode", promoValue);
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(command))
{
adapter.Fill(dTable);
}
}


2. Убедитесь, что:
- Соединение с базой данных открыто
- Имя таблицы и столбца написаны правильно с учетом регистра
- DataTable инициализирована перед использованием

Полный рабочий пример:
  
using (SQLiteConnection connection = new SQLiteConnection("Your_Connection_String"))
{
connection.Open();
DataTable dTable = new DataTable();

string sqlQuery = "SELECT * FROM Promo WHERE promo = @PromoCode";
using (SQLiteCommand command = new SQLiteCommand(sqlQuery, connection))
{
command.Parameters.AddWithValue("@PromoCode", promoValue);
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(command))
{
adapter.Fill(dTable);
}
}

// Проверка результатов
if (dTable.Rows.Count > 0)
{
// Данные найдены
}
else
{
// Данные не найдены
}
}


Также рекомендуется проверить:
1. Правильность подключения к базе данных
2. Наличие прав доступа к таблице
3. Корректность значения promoValue
4. Попробуйте выполнить простой SELECT * FROM Promo для проверки доступа к таблице
фыав фываУченик (98) 2 недели назад
Не помогло
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (236420) фыав фыва, очень информативное описание проблемы. Просто бравл
Руслан Сафин Знаток (478) 2 недели назад
Слишком маленький фрагмент кода, не понятно откуда dTable, и где и как она используется
Jurijus Zaksas Искусственный Интеллект (467180) 2 недели назад
>dtable просто не меняет свое значение
В приведенном фрагменте кода нет ничего, из-за чего бы это могло произойти.
Руслан СафинЗнаток (478) 2 недели назад
Я немного работал с этими адаптерами, через метод Fill они получают ссылку на таблицу и сами по ссылке обогащают объект таблицы данными, адаптеры ничего не возвращают, что я тоже думаю грязновато и неочевидно.
Похожие вопросы