传递SQL Login作为参数

本文关键字:参数 Login SQL 传递 | 更新日期: 2023-09-27 18:14:08

我对MS SQL不是很有经验,所以我很抱歉,如果这是一个非常愚蠢的问题,但是我在互联网上找不到任何关于它的真实信息。

因此,我要创建一个SQL Login和一个SQL User,它是这样的

SqlCommand CreateDatabaseUser = new SqlCommand("CREATE LOGIN @NewUserLogin " + 
                                               "WITH PASSWORD = '@NewUserPassword' " + 
                                               "CREATE USER @NewUserLogin FOR LOGIN @NewUserLogin", AddUserConnection);
CreateDatabaseUser.Parameters.AddWithValue("@NewUserLogin", NewUserLoginTextbox.Text);
CreateDatabaseUser.Parameters.AddWithValue("@NewUserPassword", PasswordTextbox.Text);
AddUserConnection.Open();
CreateDatabaseUser.ExecuteNonQuery();

我得到一个错误,说的是Incorrect syntax near '@NewUserLogin',但如果我这样做不正确,不安全:

"CREATE LOGIN " + NewUserLoginTextbox.Text +
" WITH PASSWORD = '" + PasswordTextbox.Text + "'" +                                                    
" CREATE USER " + NewUserLoginTextbox.Text + " FOR LOGIN " + NewUserLoginTextbox.Text

那么它确实工作!

所以,我想弄清楚我在那里做什么。提前感谢!

传递SQL Login作为参数

CREATE语句为Data Definition Language (DDL)语句。

数据操作语言不支持数据定义语言操作,支持

SqlCommand.Parameters

数据操作语言=

SELECT ... FROM ... WHERE ...
INSERT INTO ... VALUES ...
UPDATE ... SET ... WHERE ...
DELETE FROM ... WHERE ...

数据定义语言=

CREATE TABLE ... 
DROP TABLE ... ;
ALTER TABLE ... ADD ... INTEGER;

AFAIK,没有办法用参数来写这个。您需要将它们用作SQL的一部分。