2009-09-18 3 views
1

Я получил небольшой проект от компании, к которой я подал заявку. Они хотят небольшое приложение, используя asp.net GridView, FormView и ObjectDataSource с файлом DataSet (xsd). Я делаю 3-ярусные приложения, но по-другому, у меня есть свой DataAccess-слой как резкий файл с методами, принимающими параметры и возвращающие datatables и т. Д. Мой бизнес-уровень - это еще один класс со статическими методами, возвращающими бизнес-объекты и коллекции, используя DAL. Теперь этот ObjectDataSource мне не понравился, он генерирует некоторый код, который я даже не вижу где?ObjectDataSource проблема

Я мог бы заставить приложение работать до некоторой точки (90%). Остальные 10% - это мой вопрос. Мне нужно выполнить поиск по функциональности по имени. Существует два объекта ObjectDataSources 1 и 2. ObjectDatasource1 просто получает каждую запись из таблицы при первой загрузке. Когда клавиша поиска закрыта, я устанавливаю источник данных gridview ко второму ObjectDataSource, у которого есть метод под названием GetDataByNameSearch, который должен принимать параметр (все определяется wizzzardz), а источником параметра является управление (TextBox.Text). В то время как мой FormView отлично работает там, где он получает свой параметр от QueryString, этот поиск не возвращает ничего. Поиск заявление выглядит следующим образом:

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 + '%')