将SQL Login作为参数传递

时间:2014-07-22 05:29:01

标签: c# sql sql-server

我对MS SQL没有太多经验,所以如果这是一个非常愚蠢的问题,我会道歉 - 但我无法在Intenet上找到任何关于它的真实信息。

所以,我只是想为该登录创建一个SQL登录和SQL用户,它就是这样的:

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

然后就可以了!

所以,我想知道我在那里做什么。提前谢谢!

1 个答案:

答案 0 :(得分:1)

CREATE statemen t是Data Definition Language (DDL) statement

SqlCommand.Parameters 操作支持

Data manipulation language而不是 Data definition language 操作。

数据操作语言=

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

数据定义语言=

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

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