无法绑定多部分标识符 \"blah@blah.co.uk\"。使用 SqlCommand c# 时
The multi-part identifier \"blah@blah.co.uk\" could not be bound. when using SqlCommand c#
我正在尝试为我们的部署过程构建一个简单的部署助手,并且我正在尝试从一个小型 .NET 控制台应用程序更新 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,它有一大堆表,出于各种自定义原因需要更新。当尝试使用有效的电子邮件地址在下面插入时,出现异常:
The multi-part identifier \"chris.marshall@zupa.co.uk\" could not be bound.
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)
我正在尝试为我们的部署过程构建一个简单的部署助手,并且我正在尝试从一个小型 .NET 控制台应用程序更新 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,它有一大堆表,出于各种自定义原因需要更新。当尝试使用有效的电子邮件地址在下面插入时,出现异常:
The multi-part identifier \"chris.marshall@zupa.co.uk\" could not be bound.
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)