2017-01-04 4 views
2

그래서 SELECTWHERE은 가끔씩 많이 추가되기도하고 때로는 x = 1 OR x = 2이 아니기 때문에 100 개가 넘을 수도 있습니다.sql에서 params를 많이 사용하는 것이 좋습니까? {params}?

괜찮습니까? 아니면 성능을 죽일 수 있습니까? L

+0

네, 괜찮습니다. –

+0

하지만 SQL 주입 공격 및 변환 버그에 자신을 노출하려는 경우에만 –

+1

많은 매개 변수를 사용하는 것이 좋으며 SQL 문을 생성하기 위해 문자열을 연결하는 것은 좋지 않습니다. SQL 인젝션 공격의 문을 열어 놓을 때 보안 위험이 있습니다. –

답변

2

당신 :이 질문은 어떤 의미가있는 경우 여기에

string sqlString = String.Format("SELECT * FROM categories WHERE {0}", 
            stringWithAlotOfORsStatment) 

stringWithAlotOfORsStatment

확실하지 선택한 상태와 사용자에 따라 생성되는 그것의 시각적 예입니다 복수 X=1 OR X=2... 문을 단일 X IN (1,2,3)으로 대체 할 수 있습니다. 예 :

SELECT * From SomeTable where X in (1,2,3) 

문자열 목록을 사용하여 값 목록을 전달하는 대신 LINQ 및 EF 또는 Dapper.NET을 사용하여 안전한 쿼리를 만드는 것이 좋습니다. EF 배열 또는 List.Contains에 LINQ에서

IN 절에 매핑 :

var ids=new []{1,2}; 
var results = from r in ctx.SomeTable 
       where ids.Contains(r.x) 
       select r; 

이 말끔에서 매개 변수로 배열을 전달할 수 있습니다

string sql = "SELECT * FROM SomeTable WHERE x IN @ids" 
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3}); 
관련 문제