Проблема ObjectDataSource - PullRequest
       14

Проблема ObjectDataSource

1 голос
/ 18 сентября 2009

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

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

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

Любое представление о том, как предполагается использовать эти ObjectDataSources и сделать жизнь проще (!)

1 Ответ

1 голос
/ 20 сентября 2009

Без примеров кода трудно сказать, но я заметил, что использование параметров SQL немного необычно.

У вас есть:

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

Я не уверен, будут ли работать параметры SQL '@', если вокруг них есть речевые метки. Я думаю, что приведенный выше пример приведет к тому, что в запросе будет использоваться буквенная строка "% @ 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 + '%')
...