2009-09-18 3 views
1

내가 신청 한 회사에서 소규모 프로젝트를 받았습니다. 그들은 asp.net GridView, FormViewObjectDataSource에 DataSet (xsd) 파일을 사용하는 소규모 응용 프로그램을 원합니다. 3 단계 애플리케이션을 수행했지만 다른 방법으로 데이터 액세스 레이어를 params를 수락하고 데이터 테이블 등을 반환하는 메소드를 사용하여 날카로운 파일로 저장했습니다. 비즈니스 레이어는 정적 메서드를 사용하여 비즈니스 객체 및 컬렉션을 반환하는 또 다른 클래스입니다. DAL 클래스. 자,이 ObjectDataSource은 sth입니다. 나는 정말로 좋아하지 않았습니다.ObjectDataSource 문제가

나는 어떤 점 (최대 90 %)까지 응용 프로그램을 작동시킬 수 있습니다. 나머지 10 %는 내 질문에 대한 것입니다. 이름 기능으로 검색해야합니다. 두 개의 ObjectDataSources 1과 2가 있습니다. ObjectDatasource1은 첫 번째로드에서 테이블의 모든 레코드를 가져옵니다. 검색 단추를 cliked 때 gridview의 데이터 소스를 두 번째 ObjectDataSource에 설정하고 GetDataByNameSearch이라는 메서드가 있는데이 메서드는 매개 변수 (모두 wizzzardz에 의해 정의 됨)를 받아들이고 매개 변수 원본은 컨트롤 (TextBox.Text)입니다. 내 FormViewQueryString에서 매개 변수를 가져 오는 위치에서 제대로 작동하지만이 검색은 아무 것도 반환하지 않습니다. 다음 검색 문은 다음과 같습니다

SELECT  Birthday, CreatedAt, ID, Name, Surname 
FROM   Users 
WHERE  (Name LIKE '%@name%') OR 
         (Surname LIKE '%@name%') 

이 ObjectDataSources을 사용하기로하고, 만드는 방법에 대한 어떤 생각 생활 쉽게 코드 샘플 하드 말할 수 있지만, 내가 한 통지없이

답변

1

당신의 (!) SQL 매개 변수의 사용은 약간 이상합니다.

당신은이 :

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE '%@name%') OR (Surname LIKE '%@name%') 

내가 SQL 경우 확실하지 않다 '@'매개 변수가 주변 speechmarks가있을 때 작동합니다. 위의 예제는 질의에 사용 된 리터럴 문자열 '% @ name %'을 결과로 얻게 될 것이라고 생각합니다.

SQL 매개 변수는 일반적으로 다음과 같이 사용됩니다

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE @name) OR (Surname LIKE @name) 

...하지만 물론 당신은 '%'와일드 카드를 잃게됩니다. 쿼리에 매개 변수 문자열을 전달하기 전에 매개 변수 문자열에 직접 추가 할 수 있습니다. 그럴 수 없다면 다음 버전을 사용해보십시오.

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE '%' + @name + '%') OR (Surname LIKE '%' + @name + '%') 
관련 문제