Asp.net 转换nvarchar值时转换失败';aaa和x27;到数据类型int
当我试图从文本框通过Asp.net 转换nvarchar值时转换失败';aaa和x27;到数据类型int,asp.net,sql,sql-server,sql-server-2008,Asp.net,Sql,Sql Server,Sql Server 2008,当我试图从文本框通过SqlDataSource输出到gridview进行简单搜索时,标题中出现了错误。如果我搜索123,它会返回ID为123的记录,这是应该的。如果我搜索aaa,它将返回错误。有人知道为什么吗???数据库看起来是这样的: id int (primary key / identity) struser nvarchar(50) SQL语句如下所示: SELECT id, struser FROM ticket WHERE (id = @id)
SqlDataSource
输出到gridview进行简单搜索时,标题中出现了错误。如果我搜索123,它会返回ID为123的记录,这是应该的。如果我搜索aaa,它将返回错误。有人知道为什么吗???数据库看起来是这样的:
id int (primary key / identity)
struser nvarchar(50)
SQL语句如下所示:
SELECT id, struser
FROM ticket
WHERE (id = @id) OR (struser = @struser)
尝试将其强制转换为
varchar
,但我认为它将不再使用索引
WHERE (CAST(id AS VARCHAR(20)) = @id)
您可以使用下面的case语句,假设您没有id值
-1
:
SELECT id, struser FROM ticket WHERE (id = CASE ISNUMERIC(@id) WHEN 1 THEN CONVERT(int,@id) ELSE -1 END) OR (struser = @struser)
试一试
因为“aaa”不能与整数进行比较……如果您也想用整数实现某种“全文搜索”,那么您可能只需要传递一个参数,然后将所有内容转换为字符串进行比较。如果您没有选中,那么您是对的,这不使用索引(至少在我尝试它的表上)。不,
CASE是numeric(@id)
返回一个位值,因此当1
检查“true”时。此外,转换
也很重要,如果用户输入了100.5
?
SELECT id, struser
FROM ticket
WHERE (CONVERT(VARCHAR,id) = @id ) OR (struser = @struser)