Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 转换nvarchar值时转换失败';aaa和x27;到数据类型int_Asp.net_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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)