首页 > 解决方案 > 文本框控件不能接受不同数据类型的输入

问题描述

我想使用Student ID OR Student Name搜索学生。所以我这样写了我的 SELECT 语句:

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

但是,两个参数@S_FName&@SID都共享相同的文本框控件以让用户搜索学生。S_FName 是varchar(50),SID 是int

我无法通过使用单个文本框使用学生姓名或学生 ID 来真正搜索学生。我不断收到错误: Conversion failed when converting the nvarchar value 'student1' to data type int.]

标签: asp.netsql-serversqldatasource

解决方案


使用用户输入的相同搜索词进行两次比较。对于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) )

推荐阅读