Как передать параметры SQL-запроса без апострофов с помощью Entity Framework Core? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь работать с 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".

Я думаю, это связано с тем, что параметр "пользователь" передается в виде строки и указывается в кавычках при выполнении запроса.

1 Ответ

2 голосов
/ 09 апреля 2019

Вы не можете использовать приведенный ниже оператор, потому что переменная не может заменить имя объекта:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...