[SQL] 어떻게 SQL 문에 사용자가 제공 한 입력을 추가 할 수 있습니까?
SQL어떻게 SQL 문에 사용자가 제공 한 입력을 추가 할 수 있습니까?
나는 사용자가 제공 한 데이터를 사용하여 SQL 문을 만들려고하고 있습니다. 나는 C #에서 다음과 유사한 코드를 사용 :
var sql = "INSERT INTO myTable (myField1, myField2) " +
"VALUES ('" + someVariable + "', '" + someTextBox.Text + "');";
var cmd = new SqlCommand(sql, myDbConnection);
cmd.ExecuteNonQuery();
그리고 VB.NET이 :
Dim sql = "INSERT INTO myTable (myField1, myField2) " &
"VALUES ('" & someVariable & "', '" & someTextBox.Text & "');"
Dim cmd As New SqlCommand(sql, myDbConnection)
cmd.ExecuteNonQuery()
하나,
어떻게하면이 "올바른 방법"을해야합니까?
해결법
-
==============================
1.사용 SQL을 매개 변수화.
사용 SQL을 매개 변수화.
예
(이러한 예는 C #에있는 VB.NET 버전은 아래 참조).
... @로 문자열 회씩 연결 바꾸기 자리하고, 그 후, 당신하는 SqlCommand에 값을 추가합니다. 당신은 확실히 그들이 @ 기호로 시작 있는지 확인 자유롭게 자리의 이름을 선택할 수 있습니다. 귀하의 예는 다음과 같습니다
var sql = "INSERT INTO myTable (myField1, myField2) " + "VALUES (@someValue, @someOtherValue);"; using (var cmd = new SqlCommand(sql, myDbConnection)) { cmd.Parameters.AddWithValue("@someValue", someVariable); cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text); cmd.ExecuteNonQuery(); }
같은 패턴은 SQL 문의 다른 종류를 위해 사용된다 :
var sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;"; // see above, same as INSERT
또는
var sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;"; using (var cmd = new SqlCommand(sql, myDbConnection)) { cmd.Parameters.AddWithValue("@someValue", someVariable); using (var reader = cmd.ExecuteReader()) { ... } // Alternatively: object result = cmd.ExecuteScalar(); // if you are only interested in one value of one row. }
주의의 단어 : AddWithValue 좋은 출발점이며, 대부분의 경우에서 잘 작동합니다. 그러나 필요에 전달 값이 정확하게 대응하는 데이터베이스 필드의 데이터 유형과 일치하는 것이다. 그렇지 않으면 변환이 인덱스를 사용하는 쿼리를 방지하는 상황에서 끝낼 수 있습니다. 참고 또는 날짜 (이전 "n"은 제외) 등의 문자 / VARCHAR와 같은 일부 SQL Server 데이터 유형은 해당 .NET 데이터 형식이없는 것을. 이러한 경우, 올바른 데이터 유형 추가 대신 사용해야합니다.
왜 그렇게해야합니까?
다른 데이터베이스 액세스 라이브러리
-
==============================
2.이 옵션 엄격한 켜기 및 옵션 완전 추론에 가정, vb.net에서 위키 답변에 대한 예제 코드입니다.
이 옵션 엄격한 켜기 및 옵션 완전 추론에 가정, vb.net에서 위키 답변에 대한 예제 코드입니다.
끼워 넣다
Dim sql = "INSERT INTO myTable (myField1, myField2) " & "VALUES (@someValue, @someOtherValue);" Using cmd As New SqlCommand(sql, myDbConnection) cmd.Parameters.AddWithValue("@someValue", someVariable) cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text) cmd.ExecuteNonQuery() End Using
최신 정보
Dim sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;" ' see above, same as INSERT
고르다
Dim sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;" Using cmd As New SqlCommand(sql, myDbConnection) cmd.Parameters.AddWithValue("@someValue", someVariable) Using reader = cmd.ExecuteReader() ' ... End Using ' Alternatively: Dim result = cmd.ExecuteScalar() ' if you are only interested in one value of one row. End Using
from https://stackoverflow.com/questions/35163361/how-can-i-add-user-supplied-input-to-an-sql-statement by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] NOT NOT이있는 대 IN (0) | 2020.03.07 |
---|---|
[SQL] SQL에서 행과 열을 바꾸어하는 간단한 방법은? (0) | 2020.03.07 |
[SQL] 어떻게 SQL Server의 단일 견적을 탈출합니까? (0) | 2020.03.07 |
[SQL] 어떻게 SQL 서버 날짜 시간 데이터 형식에서 날짜 만 반환 (0) | 2020.03.07 |
[SQL] 그룹화 SQL 결과 각 그룹에 대해 최대 값을 기록 받기 (0) | 2020.03.07 |