2009-12-12 3 views
1

무엇이 잘못 되었나요? 이것은 내가 음속 2 CodingHorror의 예에서 찾을 어떻게하지 :(아음속 2.x MySQL 코딩 장애

new CodingHorror().Execute("SELECT * FROM product WHERE IdProduct = @IdProduct", 1); 

내가 오류가 작동 않는다 "매개 변수를 '@IdProduct'를 정의해야합니다"나는 '

음속 2.x 및 MySQL을 사용 해요!

+0

Hmmm - MySQL을 사용하여 테스트 해보고 무슨 일이 일어나는 지 확인하십시오 ... –

답변

1

하는 @Product 대신 ?를 사용해보십시오.

new CodingHorror().Execute("SELECT * FROM product WHERE IdProduct = ?", 1); 

MySQL은 다른 (대. SQL Server) 구문을 사용하여 매개 변수를 참조 할 수 있으며 CodingHorror (즉, 직접적인 SQL을 SubSonic을 사용하지 않고 DB로 파이프하는 경우) RDBMS의 원시 매개 변수 구문 (이 경우 MySQL)을 사용해야 할 수 있습니다.

SQL Server와 MySQL 사이의 매개 변수 구문에 대한 자세한 내용은 this blog post을 참조하십시오.

SubSonic은 아무 것도하지 않는 것으로 가정합니다 (예 : 매개 변수 이름에 대해 SQL 문자열을 검사하고 DB 관련 규칙에 따라 바꿉니다). - SubSonic이 단순히 SQL 문자열을 전달한다고 가정합니다. 있는 그대로 DB에 있습니다.

+0

안녕하세요, 도움을 주셔서 대단히 감사합니다! Subsonic이 SQL 문자열을 숨기고 MySQL 매개 변수 구문으로 Subsonic이 매개 변수를 인식하지 못하기 때문에 유감스럽게도 해결책이 아닙니다. SubSonic.SqlQueryException : 매개 변수 개수가 입력 된 값과 일치하지 않습니다. 이는 파서의 잘못이 될 수 있습니다. 카운트가 합산되도록 목록을 확인하십시오. 목록에있는 매개 변수 주위에 간격을 추가하십시오. –

+0

흠. 파서가 "- @foo"가 주석인지 충분히 똑똑합니까? 그렇지 않으면 파서를 속일 수있는 쉬운 방법입니다. –