Не удалось связать идентификатор из нескольких частей \ "blah@blah.co.uk \". при использовании SqlCommand c# - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь создать простой помощник для нашего процесса развертывания и пытаюсь обновить базу данных SQL в azure из небольшого консольного приложения NET.

Метод, который вызывает проблему, приведен ниже

        private static void ConnectToSqlDatabase(string azureDatabaseUrl, IConfiguration config, string authUserEmail)
        {
            try
            {
                SqlConnectionStringBuilder connBuilder = new SqlConnectionStringBuilder();
                connBuilder.DataSource = azureDatabaseUrl;
                connBuilder.UserID = config["SqlDatabase:ZupaKeyReleaseUserName"];
                connBuilder.Password = config["SqlDatabase:ZupaKeyReleasePassword"];
                connBuilder.InitialCatalog = "zupaauthentication";

                using (SqlConnection connection = new SqlConnection(connBuilder.ConnectionString))
                {
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandText = $"UPDATE AspNetUsers SET EmailConfirmed = 1 WHERE Email = {authUserEmail}";

                        connection.Open();
                        command.ExecuteNonQuery();
                        connection.Close();
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.InnerException);
            }
        }

Мы используем идентификационный сервер 4, который имеет целую кучу таблиц, которые нуждаются в обновлении для достоверности определенных пользователем причин. При попытке выполнить вставку ниже с действительным адресом электронной почты я получаю исключение:

Не удалось связать многоэлементный идентификатор \ "chris. marshall@zupa.co.uk \".

command.CommandText = $"UPDATE AspNetUsers SET EmailConfirmed = 1 WHERE Email = {authUserEmail}";

ОБНОВЛЕНИЕ: Также было интересно, как многострочные SQL команды будут вводиться, поскольку это тоже не работает. Например, такого рода оператор

INSERT INTO AspNetUserRoles (UserId,RoleId)
SELECT        anu.Id
        ,    r.Id 
FROM    AspNetUsers anu
CROSS JOIN 
(
        SELECT Id 
        FROM AspNetRoles 
        WHERE [Name] = @targetrole
) r
WHERE    Email = @targetuser

Я предполагал заключить его в одну строку и использовать .add для добавления значений, но это не сработало.

1 Ответ

1 голос
/ 14 февраля 2020

Эта ошибка означает, что используемый вами столбец не найден, SQL синтаксическая ошибка. приведенный ниже псевдокод, что-то в этом роде ... (вам не хватает апострофов вокруг значения электронной почты)

Используйте знак @, чтобы сделать его параметром. После этого добавьте параметр в запрос. Вам не хватает некоторых символов, поэтому он думает, что ваша электронная почта является фактическим столбцом. Просто обновите ваш запрос.

command.commandtext = "update aspnetusers set emailconfirmed = 1 where email = @email"
command.parameters.add("@email", authUserEmail)
...