Синтаксическая ошибка в SQLite.net при передаче имени столбца в качестве параметра - PullRequest
2 голосов
/ 15 апреля 2010

Я пытаюсь переименовать поле в своей базе данных через SQLite.net и получаю синтаксическую ошибку. Мой SQL, который я тестировал:

UPDATE candy SET name="Godiva" WHERE name="Sees";

и это прекрасно работает. Я использую SQLiteCommand с CommandText:

UPDATE candy SET @field_name=@new_name WHERE @field_name=@old_name;

и мой фрагмент кода, который устанавливает значения, выглядит следующим образом:

Connection.Open();
transaction = Connection.BeginTransaction();
UpdatePropertyQuery.Parameters.AddWithValue( "@field_name", "name");
UpdatePropertyQuery.Parameters.AddWithValue( "@old_name", "Sees");
UpdatePropertyQuery.Parameters.AddWithValue( "@new_name", "Godiva");
UpdatePropertyQuery.ExecuteNonQuery();
transaction.Commit();
Connection.Close();

Я не эксперт по базам данных, поэтому, с точки зрения новичка, похоже, что это должно сработать, но, возможно, это вообще что-то с SQL, чего я не понимаю. Как правильно это сделать, и кто-нибудь может объяснить, почему этот подход не сработает?

1 Ответ

2 голосов
/ 15 апреля 2010

Как правило, подобные утверждения возможны только при использовании параметров, которые относятся к фактическим формальным параметрам в базовом запросе, т. Е.

UPDATE candy SET name=@new_name WHERE name=@old_name;

Идея состоит в том, что все объекты базы данных, такие как имена таблиц и полей, должны быть неявно указаны в выражении, так что базовая библиотека доступа к базе данных может выполнять проверки по строкам "- это значение, указанное для candy.name правильного типа ».

В вашем примере имя поля заранее неизвестно, поэтому проверки такого типа невозможны.

Дополнительная информация здесь .

Если имя поля является переменным, вы можете просто создать строку, содержащую SQL, и выполнить ее напрямую, или настроить то, что вам нужно, чтобы включить имя поля в текст команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...