У меня есть две таблицы доступа: пользователи и оценки.
таблица пользователей имеет столбцы: идентификатор (автоматическое приращение идентификатор пользователя), имя пользователя, пароль - идентификатор первичного ключа таблицы результаты имеет столбцы: идентификатор (идентификатор пользователя от пользователей), рекордами - не имеет первичного ключаДоступ к базе данных INSERT с подзапросом из C#
В C# метод Я беру имя пользователя и оцениваю как параметры, и я хочу вставить в таблицу оценок, чтобы в поле id был идентификатор пользователя с именем пользователя, которое соответствует указанному.
До сих пор команды, которые я пробовал были:
string insertCommand = @"INSERT INTO scores([id], [highScore])
VALUES((SELECT id FROM users WHERE username = @username), @score);";
Это проливает: входной запрос должен содержать, по меньшей мере, одну таблицу или запрос.
Так после обнюхивать я обнаружил, что Access БД вид отличается от обычного SQL, так что я попытался с помощью DLookup:
string insertCommand = @"INSERT INTO scores([id], [highScore])
VALUES(DLookup(""id"", ""users"", ""username = '@username'""), @score);";
Это проходит, но в результате строка пуста. Поэтому я в основном получаю пустую строку, которая не является NULL.
Я абсолютно уверен, что параметры содержат значения, поскольку они добавляются до выполнения команды.
command.Parameters.AddWithValue("@username", username);
command.Parameters.AddWithValue("@score", points);
command.CommandText = insertCommand;
command.ExecuteNonQuery();
Поэтому я понятия не имею, что я здесь делаю неправильно. Должен ли я даже пойти на это так? Могу ли я каким-то образом присоединиться к пользователям и забить таблицы внутри вставки?
Почему не вы разбиваете его на два шага: один шаг для получения идентификатора имени пользователя, предоставленного в качестве параметра, а другой шаг - вставить в таблицу баллов. Это позволяет избежать проблемы с дополнительным запросом. – Ahmad
@Ahmad Ну, я мог, но вся причина, по которой я решил использовать подзапросы, - это не делить процесс на два шага, когда это можно сделать в одном. – MrPlow
Вы пробовали '' "username = @username" "' вместо '" "username = '@username'" "'? –