【问题标题】:Textbox control can't accept different data types of input文本框控件不能接受不同数据类型的输入
【发布时间】:2018-10-14 04:02:14
【问题描述】:

我想使用学生证或学生姓名搜索学生。所以我这样写了我的 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.]

【问题讨论】:

  • 是的,您可以,只需使用一个简单的 if/else 语句,每个语句中使用不同的 select 语句,具体取决于输入的内容。

标签: asp.net sql-server sqldatasource


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你必须传递一个参数,因为文本框是相同的 并且您必须将 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%')
    

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 2018-01-13
      • 2020-07-30
      相关资源
      最近更新 更多