2013-06-05 3 views
0

내 C# 콘솔 Applcation이 포함되어있다.C# 콘솔 호출 SQL 나쁜 실행 문자열은 리투아니아어 문자

2 :

readname.CommandText = "SELECT [ID] FROM [Net7].[dbo].[GroupFilter] WHERE 
[GroupFilterName]='" + CE_ParentName_ + "'"; // I need to find records in my DB with name of that string (1 possible option) 

3 :

if (NameReader.Read()) { idd = NameReader[0].ToString(); } // if i get any results ar no.2 i need to read them 

점은 문자열 리투아니아어 문자가 포함 된 경우 2 번 반환 결과를 제로이다. 문자열에 리투아니아어 문자가 없으면 모든 것이 완벽합니다. 모든 것을 시도해, 당신은 나의 마지막 희망입니다.

+5

현재 수행중인 작업을 중단하고 매개 변수가있는 쿼리를 사용하십시오. 뿐만 아니라 문제를 해결할뿐만 아니라 사용자가 가진 엄청나게 큰 눈부신 SQL 인젝션 취약점을 처리합니다. 여기에서 시작하십시오 : http://johnhforrest.com/2010/10/parameterized-sql-queries-in-c/ – asawyer

답변

0

리투아니아 문자는 멀티 바이트입니까? (예 : 일본어) GroupFilterName은 NVARCHAR 또는 VARCHAR입니까? 그것이 NVARCHAR이라면 아마도 문자열 앞에 N을 넣어야합니다.

예 :

readname.CommandText = "SELECT [ID] FROM [Net7].[dbo].[GroupFilter] WHERE 
[GroupFilterName]=N'" + CE_ParentName_ + "'"; 

그리고 asawyer의 댓글이 주입 공격을 피할 수에 대한 참조하십시오.

+0

안녕하세요, 주입 공격에 대해서는 나중에 프로그램을 다시 작업하겠습니다. 그 변호사에 대해 고마워. 그러나 내 프로그램은 Windows 서버 (예약 된 작업)에서 내부적으로 실행되어 하나의 DB를 다른 데이터베이스로 동기화합니다. 나는 주사를 두려워 할 필요가 없다거나 내가 옳지 않다고 생각하니? user2444499에 대한 대답은 GroupFilterName - nvarchar (255)입니다. 당신에게 제안을 시도 할 것입니다. – Arunas

+0

User2444499 - 문자열 앞의 N은 도움이되지 않습니다. GroupFilterName - w/o 리투아니아어 기호 - 모든 것이 괜찮을 때 언급/반복하고 싶습니다. 리투아니아어 charakters는 독일어/프랑스어/폴란드어와 같은 몇 가지 특별한 예입니다. ¡, Č, Ê. 멀티 바이트가 아닌 것 같습니다. – Arunas

+0

SQL Server Management Studio에서 SQL 쿼리를 직접 실행 해 보았습니까? (SQL Server를 사용한다고 가정) 작동하는지보십시오. 나는 매개 변수화 된 쿼리를 시도했다. 코드가 내부 응용 프로그램 인 경우에도 CommandText를 설정하는 것은 나쁜 습관 일뿐입니다. 매개 변수화 된 쿼리를 사용하는 코드가 몇 줄 밖에 없습니다. – user2444499