2014-07-22 4 views
3

저는 MS SQL에 너무 익숙하지 않아서 매우 어리석은 질문인데 죄송 합니다만, Intenet에서는 그 정보가 없습니다.SQL 로그인을 매개 변수로 전달하십시오.

그래서, 난 그냥 로그인을위한 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

CREATE statement는 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 ... 

데이터 정의 언어 = AFAIK

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

, 매개 변수와 함께이 쓸 수있는 방법이 없습니다. 그것들을 SQL의 일부로 사용해야합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. DDL 성명서를 다루는 올바른 방법은 무엇입니까? – Stutz

+0

@Stutz SQL 주입 공격을 피하기 위해 SQL에 입력하기 전에 사용자 이름과 암호에 대해 _ 매우 very_ 엄격한 유효성 검사를 수행하거나 유효한 사용자 이름과 암호의 허용 목록 집합을 가져야합니다. –

+0

다시 한번 감사드립니다! 당신은 매우 도움이되고 있습니다! :) 너는 C#으로 그것을 검증 할 수있는 내장 도구가 있기를 바라고 있었다. .. Welp, 내가 수동으로해야한다고 생각해! – Stutz

관련 문제