Схема базы данных в SqlDataSource - PullRequest
       43

Схема базы данных в SqlDataSource

0 голосов
/ 26 сентября 2018

Я пытаюсь разрешить пользователям искать ученика, используя имя или идентификатор ученика в текстовом поле.Результат поиска будет отображаться в элементе управления GridView.

Это мой SelectCommand в HTML

SelectCommand="SELECT * FROM [student] WHERE (([FName] LIKE '%' + @FName + '%') AND ([SID] = @SID))

Тем не менее, строка выше запрашивает у пользователей ввести имя и идентификатор ученика вместе для поиска.Я пытался изменить его на:

SelectCommand="SELECT * FROM [student] WHERE (([FName] LIKE '%' + @FName + '%') OR([SID] LIKE '%' + @SID + '%'))">

Но это не сработает.В сообщении об ошибке указано:

System.FormatException: входная строка была неверного формата.

PLS HELP.Почему я не могу поместить условие ИЛИ в элемент управления SqlDataSource?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Если вы только получаете один параметр поиска (Google Style), ваш запрос SQL должен выглядеть следующим образом:

SELECT * FROM [student] WHERE (([FName] LIKE '%' + @searchPattern + '%') OR 
([SID] = @searchPattern )
0 голосов
/ 26 сентября 2018

Попробуйте инвертировать SID с помощью имени, еще раз проверьте, что параметр @SID является целым числом, это должна быть строка, в базе данных [SID] это varchar?

Если вы программно изменяете параметры, обратите внимание на использование значений по умолчанию, а не на случайную повторную декларацию новых параметров.

SqlDataSource1.SelectParameters["SID"].DefaultValue = "123";

Другое дело, если ваш SID является целым числом, вы не можете использовать оператор LIKE в sqlserver, вы должны привести его к varchar

0 голосов
/ 26 сентября 2018

Будь осторожен здесь.Я вижу ошибки в запросе.

Сначала, скажем, я ищу по SID и оставляю поле имени пустым.Это приведет к выражению наподобие этого:

WHERE FName LIKE '%%' OR SID LIKE '%1234%'

Это условие OR, где левая сторона будет соответствовать что угодно . всегда вернет всех записей.Я также предлагаю сделать поиск SID точным соответствием.Если у вас есть идентификационный номер студента, у вас есть целый идентификационный номер.

Во-вторых, SID, скорее всего, числовое / целочисленное поле.ASP.Net должна иметь возможность преобразовывать ваш SID ввод в число, даже если этот ввод является пустой строкой.Вот откуда приходит ваше сообщение об ошибке.

Мое предложение здесь - установить ваш SQL CommandText для источника данных во время обратной передачи, для любого события, которое вы обрабатываете для запуска этого запроса.Создайте строку так, чтобы она включала только условие для полей, которые были фактически предоставлены пользователем. Все еще пользовательские запросы для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...