Member 14107277 Ответов: 1

Как передать параметры в запрос в ASP.NET


Я пытаюсь создать sql-логин через веб-приложение, я пытаюсь выполнить запрос для создания пользователя, но мои параметры передаются в виде строки. не знаю, что я делаю не так.

Что я уже пробовал:

string sql = @"CREATE LOGIN @Username WITH PASSWORD= @Password, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
            GO
            USE @DatabaseName
            GO
            CREATE USER @Username FOR LOGIN @Username
            GO
            USE @DatabaseName
            GO
            EXEC sp_addrolemember @RoleName, @Username
            ";
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnstr"].ToString());            
            SqlCommand cmd = new SqlCommand(sql, cn);
            cn.Open();
            cmd.Parameters.Add("@Username", SqlDbType.NVarChar).Value = txtuser.Text;
            cmd.Parameters.Add("@Password", SqlDbType.NVarChar).Value = txtpass.Text;
            cmd.Parameters.Add("@DatabaseName", SqlDbType.NVarChar).Value = dbList.Text;
            cmd.Parameters.Add("@RoleName", SqlDbType.NVarChar).Value = roleList.Text;            
            cmd.ExecuteNonQuery();

F-ES Sitecore

Они передаются как строка, поскольку вы определяете их как nvarchar

Значения sqldbtype.Тип nvarchar

измените этот тип на тот, который вам нужен.

Member 14107277

Я имел в виду, что параметры вообще не передаются. я попытался отладить, чтобы посмотреть на запрос и его просто @Username, @Password вместо ввода пользователем в текстовом файле.
Так я получаю сообщение об ошибке: неправильный синтаксис рядом с @Имя_пользователя

OriginalGriff

А как вы ожидали, что их примут? Пицца с пепперони?
Они передаются как строки, потому что это то, что вы сказали им передать как: NVARCHAR-это строка (в частности, строка Unicode)

Так в чем же проблема? Почему ты думаешь, что они не должны быть струнами?

Member 14107277

Я имел в виду, что параметры вообще не передаются. я попытался отладить, чтобы посмотреть на запрос и его просто @Username, @Password вместо ввода пользователем в текстовом файле.
Так я получаю сообщение об ошибке: неправильный синтаксис рядом с @Имя_пользователя

ZurdoDev

Я никогда не использую этот синтаксис.

Попробуй

cmd.параметры.AddWithValue("@paramName", txt1.Text);

Member 14107277

Попробовать это. Я все еще получаю ту же ошибку "неверный синтаксис @Username"
cmd1.параметры.AddWithValue("@Username", txtuser.Text);
cmd1.параметры.AddWithValue ("@Password", txtpass.Text);
cmd1.параметры.AddWithValue("@DatabaseName", dbList.Text);
cmd1.параметры.AddWithValue("@RoleName", roleList.Text);

ZurdoDev

Он может не работать с CREATE LOGIN. Я бы поискал примеры в google, их там, скорее всего, тонны.

1 Ответов

Рейтинг:
4

OriginalGriff

Цитата:
Я имел в виду, что параметры вообще не передаются. я попытался отладить, чтобы посмотреть на запрос и его просто @Username, @Password вместо ввода пользователем в текстовом файле.
Так я получаю сообщение об ошибке: неправильный синтаксис рядом с @Имя_пользователя
Это другое дело, это не имеет ничего общего с тем, как передаются данные, это связано с тем, как и когда SQL выполняет подстановки параметров.

А CREATE LOGIN не допускает подстановки параметров (потому что она обрабатывается до выполнения подстановок), поэтому вы не можете написать это:
CREATE LOGIN @Username WITH PASSWORD= @Password
Вы должны написать это так:
CREATE LOGIN N'MyUsername' WITH PASSWORD= N'MyPassword'

Вы можете это сделать - вам просто нужно использовать динамический SQL: Выполнение динамических команд SQL в SQL Server[^] и построить строку NVARCHAR для выполнения.