簡體   English   中英

無法綁定多部分標識符 \\"blah@blah.co.uk\\"。 使用 SqlCommand c# 時

[英]The multi-part identifier \"blah@blah.co.uk\" could not be bound. when using 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 添加值,但這似乎不起作用。

該錯誤意味着未找到您正在使用的某些列,SQL 語法錯誤。 下面的偽代碼,類似的東西......(你在電子郵件值周圍缺少撇號)

使用@符號使其成為參數。 之后添加參數進行查詢。 您缺少一些字符,因此它認為您的電子郵件是一個實際的列。 只需更新您的查詢。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM