首页 > 解决方案 > 无法绑定多部分标识符“blah@blah.co.uk”。当使用 SqlCommand c#

问题描述

我正在尝试为我们的部署过程构建一个简单的部署帮助程序,并且我正在尝试从一个小型 .NET 控制台应用程序对 Azure 中的 SQL 数据库进行更新。

抛出问题的方法就在下面

        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 添加值,但这似乎不起作用。

标签: c#sqlsql-serversql-updateconsole-application

解决方案


该错误意味着未找到您正在使用的某些列,SQL 语法错误。下面的伪代码,类似的东西......(你在电子邮件值周围缺少撇号)

使用@符号使其成为参数。之后将参数添加到查询。您缺少一些字符,因此它认为您的电子邮件是一个实际的列。只需更新您的查询。

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

推荐阅读