为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Entity Framework Core 传递没有单撇号的 SQL 查询参数?

如何使用 Entity Framework Core 传递没有单撇号的 SQL 查询参数?

C#
慕容森 2022-12-04 13:20:27
我正在尝试使用 SQL Server 2012。我有一个数据库,我需要通过代码创建一个新的数据库用户。但我不处理它。首先,这是我的 SQL 查询CREATE USER TestUser FOR LOGIN TestUser在 SQL Server 中,它运行良好。我有这段代码:internal class ServerContext : DbContext{    public ServerContext(DbContextOptions<ServerContext> options) : base(options) { }}<'''>DbContextOptions<ServerContext> _options;var optionsBuilder = new DbContextOptionsBuilder<ServerContext>();var connectionString = string.Format(ConnectionString.ConnectString, url, dbName, login, password);_options = optionsBuilder.UseSqlServer(connectionString).Options;using (var context = new ServerContext(_options)){    if (data.Count() == 0)    {       context.Database.ExecuteSqlCommand(Query.CreateDbUser, new SqlParameter("@Login", "user"));    }}<'''>public static class Query{         public static string CreateDbUser = "CREATE USER @Login FOR LOGIN @Login";}此查询转换为: exec sp_executesql N'CREATE USER @Login FOR LOGIN @Login',N'@Login nvarchar(4)',@Login=N'User' 我得到这个错误:“@Login”周围的语法无效。我认为这是由于参数“user”作为字符串传递并在执行查询时用引号指定。
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

您不能使用以下语句,因为变量不能替换对象的名称:


exec sp_executesql N'CREATE USER @Login FOR LOGIN @Login',N'@Login nvarchar(4)',@Login=N'User'

这将尝试创建一个名为 的用户@Login,这是无效的。您需要使用动态 SQL:


DECLARE @SQL nvarchar(MAX);

SET @SQL = N'CREATE USER ' + QUOTENAME(@Login) + N' FOR LOGIN '+ QUOTENAME(@Login) + N';';

EXEC sp_executesql @SQL;


查看完整回答
反对 回复 2022-12-04
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信