Элемент управления Textbox не может принимать разные типы данных - PullRequest
0 голосов
/ 14 октября 2018

Я бы хотел найти студента, используя Идентификатор студента ИЛИ Имя студента .Поэтому я написал свое предложение SELECT следующим образом:

SELECT * FROM [student] WHERE ([S_FName] LIKE '%' + @S_FName + '%') OR (SID =@SID)

Однако оба параметра @S_FName & @SID совместно используют один и тот же элемент управления текстовым полем, чтобы пользователи могли искать ученика.S_FName - varchar(50), а SID - int

Я не могу найти ученика, используя имя ученика или идентификатор ученика, используя одно текстовое поле.Я получаю сообщение об ошибке: Conversion failed when converting the nvarchar value 'student1' to data type int.]

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

вам нужно передать один параметр, потому что Textbox - это то же самое, и вы должны конвертировать id в varchar, чтобы тип id и fname были равны, чтобы вы могли следовать приведенному ниже коду

    SELECT        [S_FName], SID, CAST(SID AS 
    varchar(50)) + '-' + S_FName AS S_FName_ID
    FROM            Coding_view
    WHERE        (CAST(SID AS varchar(50)) + '-' + S_FName LIKE 
    N'%Behmagham%')

удачи

0 голосов
/ 14 октября 2018

Используйте один и тот же поисковый термин, введенный пользователем, для обоих сравнений.Для INT сначала преобразуйте его в строку.Другой вариант - преобразовать поисковый термин в INT, но тогда вам потребуется специальная обработка нечисловых значений.

create table Student 
  ( StudentID int,
    StudentName nvarchar(80) )

insert into Student ( StudentID, StudentName ) values
( 10123, 'Archimedes' ),
( 74701, 'Beatrice'   ),
( 84448, 'Casandra'   ),
( 99599, 'Archibald'  )

declare @Search nvarchar(80)

set @Search = 'Arch'

select * from Student 
where ( StudentName like '%' + @Search + '%' )
or ( cast(StudentID as nvarchar(20)) = @Search )

set @Search = '74701'

select * from Student 
where ( StudentName like '%' + @Search + '%' )
or ( cast(StudentID as nvarchar(20)) = @Search )

Если у вас установлен SQL Server 2012 или более поздней версии, выможно использовать Try_Convert для упрощения.

select * from Student 
where ( StudentName like N'%' + @Search + N'%' )
or ( StudentID = Try_Convert(int,@Search) )
...