Я пытаюсь создать простой помощник для нашего процесса развертывания и пытаюсь обновить базу данных 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 для добавления значений, но это не сработало.