[SQL] C #하는 SqlCommand - 어떻게 해결에 열 이름에 대한 매개 변수를 사용할 수없는 이유는 무엇입니까?
SQLC #하는 SqlCommand - 어떻게 해결에 열 이름에 대한 매개 변수를 사용할 수없는 이유는 무엇입니까?
그렇게하는 방법을 방법이 있나요? 이 작동하지 않습니다
SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; ");
prikaz.Parameters.AddWithValue("name", name);
prikaz.Parameters.AddWithValue("slot", slot);
내가 생각할 수있는 유일한 방법은 SP와 선언을 사용하고 열에 대한 변수를 설정하는 것입니다. 비트 ackward 나에게 보인다.
해결법
-
==============================
1.당신은 일반 SQL에서이 작업을 수행 할 수 없습니다 - 당신은 (그 문제에 대한 또는 테이블 이름) 구성 열 이름이 있어야합니다, 당신은 동적 SQL을 사용해야합니다 -이를 달성하기 위해 다른 방법이 없습니다.
당신은 일반 SQL에서이 작업을 수행 할 수 없습니다 - 당신은 (그 문제에 대한 또는 테이블 이름) 구성 열 이름이 있어야합니다, 당신은 동적 SQL을 사용해야합니다 -이를 달성하기 위해 다른 방법이 없습니다.
string sqlCommandStatement = string.Format("SELECT {0} FROM dbo.Users WHERE name=@name", "slot");
그리고 그 SQL 명령을 실행하는 SQL Server에서 sp_executesql에 저장된 프로 시저를 사용하여 (필요에 따라 다른 매개 변수를 지정).
전문적으로 SQL 서버 MVP ERLAND Sommarskog에 의해 작성 저주와 동적 SQL의 축복에 대한 궁극적 인 기사를 읽고 - 동적 SQL은 장단점이 있습니다.
-
==============================
2.언급 한 바와 같이 런타임시 쿼리 자체를 구축해야 할 것이다, 그래서 당신은 기본 쿼리의 파라미터를 할 수 없다. 당신은 근본적으로 주입 공격을 방지하지만, 이번의 입력을 화이트 나열해야합니다 :
언급 한 바와 같이 런타임시 쿼리 자체를 구축해야 할 것이다, 그래서 당신은 기본 쿼리의 파라미터를 할 수 없다. 당신은 근본적으로 주입 공격을 방지하지만, 이번의 입력을 화이트 나열해야합니다 :
// TODO: verify that "slot" is an approved/expected value SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ") prikaz.Parameters.AddWithValue("name", name);
이 방법 @name은 여전히 매개 변수화되는 등
from https://stackoverflow.com/questions/3330343/c-sharp-sqlcommand-cannot-use-parameters-for-column-names-how-to-resolve by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클에서 밀리 초에 타임 스탬프 사이의 차이 (0) | 2020.05.29 |
---|---|
[SQL] H2 데이터베이스 열 이름 "그룹은"예약 된 단어입니다 (0) | 2020.05.29 |
[SQL] T-SQL은 : 이메일 형식 검사 (0) | 2020.05.29 |
[SQL] 그들이 삽입 된 정확한 순서로 반환 행 (0) | 2020.05.29 |
[SQL] 열 '메리'이 (가) 없습니다 (0) | 2020.05.29 |