@baimkin

Почему не работает UPDATE c#?

Есть запрос в базу SQLite:
UPDATE products SET manager = (
SELECT user FROM brandUsers WHERE firstCom IS NOT NULL AND prodBrand = brandUsers.brand AND firstCom = brandUsers.user
) WHERE manager IS NULL AND firstCom IS NOT NULL;


Он отлично без ошибок отрабатывает и обновляет данные в SQLiteStudio,
но когда выполняю этот код в VS, ничего не обновляется:
using (SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", dbPath)))
{
	string sqlCom = $@"UPDATE products SET manager = (
                SELECT user FROM brandUsers WHERE firstCom IS NOT NULL AND prodBrand = brandUsers.brand AND 
                firstCom = brandUsers.user
		) WHERE manager IS NULL AND firstCom IS NOT NULL";
		
	connection.Open();
	
	SQLiteCommand command = new SQLiteCommand(sqlCom, connection);
	try
	{
		command.ExecuteNonQuery();
		connection.Close();
		return true;
	}
	catch
	{
		File.AppendAllText(Environment.CurrentDirectory + @"\SQLError.txt", DateTime.Now.ToString() + "\t" + sqlCom + Environment.NewLine);
		connection.Close();
		return false;
	}              
}


Весь мозг сломал, не могу понять в чем может быть проблема?
  • Вопрос задан
  • 439 просмотров
Пригласить эксперта
Ответы на вопрос 4
@basrach
prodBrand = brandUsers.brand

просто строка, нужно либо string.Format(), либо интерполяцию использовать, либо параметры команды (что лучше всего)
Ответ написан
@Sumor
Возможно требуется точка с запятой в конце выражения?
Ответ написан
@Smiz001
C#-developer
В блок catch добавьте Exceprion и при дебаге пробегитесь по этому коду и посмотрите сообщение об ошибке.
Просто если запрос отрабатывает нормально в SQLiteStudio, то может у вас подключение не проходит?
Ответ написан
@Klass
web developer
Не знаю, актуально еще или нет. Первое что нужно проверить это включена ли автоматическая фиксация или нет. Должна быть включена по дефолту.
sqlite3_get_autocommit
Второе, вложенный запрос должен всегда возвращать скалярное выражение (одно значение для каждой строки).
Можно использовать метод Update у sqlliteconnection. updates
есть пакет в nuget sqllite-net-pcl ,
ну это совсем на крайняк.
Лучше воспользуйтесь параметризированным запросом и попробуйте разбить ваш запрос на два : select и update.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы