asp.net - 文本框控件不能接受不同数据类型的输入
问题描述
我想使用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.]
解决方案
使用用户输入的相同搜索词进行两次比较。对于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) )
推荐阅读
- python - 如何修复“SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte”
- r - 在 YAML 中为作者和日期创建两列
- php - php脚本运行次数过多
- java - 字符串更改其值导致 java.io.FileNotFoundException
- mysql - 如何在不覆盖sql中的数据的情况下对数据集进行分组
- python - 将 json 文件导入 pandas 数据框
- javascript - Z-Index:Divs 不重叠?
- c++ - 如何检测字符串中的“[”+数字+“]”并找到最高数字
- c++ - 如何使用 C++ 创建一个对“所有人”具有共享访问权限的文件夹
- android - Android 通过 Wifi 请求 API google 会延迟或超时