2011-08-24 3 views
2

여기서 잘못된 것은 무엇입니까?nvarchar 값을 데이터 유형 int로 변환 할 때 변환하지 못했습니다.

string favorites = "210,213"; 

sqlCommand.CommandText = "select * from clients (nolock) 
    where Deleted = 0 and ClientID in (@favorites)"; 
sqlCommand.Parameters.AddWithValue("@favorites", favorites); 

"210,213"은 하나의 예입니다. 길이는 임의의 길이가 될 수 있습니다. 그래서 SQL IN 연산자를 사용하고 있습니다.

감사합니다.

+0

당신이'int.Parse' 필요하지 않습니까? – V4Vendetta

+0

ClientID의 데이터 유형은 무엇입니까? – roymustang86

+0

태그를 사용하여 질문을 분류하십시오. 제목에 "C# ADO.NET"과 같은 것을 사용하지 마십시오. –

답변

3

매개 변수가 작동하는 방식이 아닙니다. 실제로 클라이언트 ID가 이고 '210,213'인 클라이언트를 얻으려고합니다. 글쎄, 그건 숫자가 아니야. 그래서 실패가있다.

IN 목록 크기가 동적이며 수시로 변경되면 매개 변수가있는 쿼리와 IN 절이 실제로 구현되지 않습니다. Parameterize an SQL IN clause

일반적으로 동적으로 항상 SQL Injection처럼 마음의 문제에두고, 당신의 SQL 쿼리를 조립해야 할 것 :

이 SO 질문을 읽어보십시오.

추가 읽기 :

0

즐겨 찾기 문자열을 사용하여 commandtext를 생성해야합니다. 배열에는 SQL 형식이 없습니다. 아마도 정수 목록에서 즐겨 찾기를 생성하여 SQL 공격으로부터 자신을 보호 할 수 있습니다.

+0

배열이 아닙니다. SQL IN 연산자를 사용하고 있습니다. – user390480

+0

이해 -하지만 난 뒷이야 귀하의 매개 변수는 SQL 서버에서 유형과 일치해야합니다 생각합니다. 매개 변수를 배열로 처리하도록 SQL 서버를 요청했지만 SQL Server에는 배열이 내장되어 있지 않습니다. T-SQL에서 명령을 작성한다고 가정 해 봅시다. 어떻게 변환합니까? @favorites의 데이터 유형은 무엇입니까? 문자열? 시도해보십시오. 작동하지 않습니다. 전에 T-SQL에서이 문제를 다루었습니다. 문제가 .net과 동일하다는 것이 확실합니다. 나는 위의 대답이 이것을 말한다고 생각한다. –

관련 문제