J'essaie de créer une aide au déploiement simple pour notre processus de déploiement et j'essaie de faire une mise à jour sur une base de données SQL dans Azure à partir d'une petite application console .NET.

La méthode qui pose le problème est juste en dessous

        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);
            }
        }

Nous utilisons le serveur d'identité 4 qui contient tout un tas de tables qui doivent être mises à jour pour de nombreuses raisons personnalisées. En essayant de faire l'insertion ci-dessous avec une adresse e-mail valide, j'obtiens l'exception :

L'identifiant en plusieurs parties \"chris.marshall@zupa.co.uk\" n'a pas pu être lié.

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

MISE À JOUR : Je me demandais également comment les commandes SQL multilignes seraient entrées car cela ne fonctionnait pas non plus. Par exemple ce genre de déclaration

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

J'ai pensé qu'il fallait une seule ligne et utiliser le .add pour ajouter les valeurs, mais cela ne semblait pas fonctionner.

0
Chris Marshall 14 févr. 2020 à 00:38

1 réponse

Meilleure réponse

Cette erreur signifie qu'une colonne que vous utilisez n'est pas trouvée, erreur de syntaxe SQL. pseudo code ci-dessous, quelque chose comme ça... (il vous manque des apostrophes autour de la valeur de l'e-mail)

Utilisez le signe @ pour en faire un paramètre. Après cela, ajoutez un paramètre à la requête. Il vous manque certains caractères, il pense donc que votre e-mail est une colonne réelle. Mettez simplement à jour votre requête.

command.commandtext = "update aspnetusers set emailconfirmed = 1 where email = @email"
command.parameters.add("@email", authUserEmail)
1
Dale K 13 févr. 2020 à 22:00