我有一个对象数据源,它从数据库中提取信息,如果我们没有这个特定参数的值,那么我们想得到所有记录。所以我有一个LIKE语句,我使用通配符返回所有条目,但这给了我错误信息
System.Data.SqlClient.SqlException(0x80131904):将nvarchar值'%'转换为数据类型int时转换失败。
相关列的表结构为:
[columnName] VARCHAR(50)
SQL类似于:
SELECT [columns] from [table] where [column] LIKE @param
然后在VB中添加参数:
Dim sessionParam As New Parameter
sessionParam.Name = "param"
sessionParam.DefaultValue = "%"
sessionParam.Type = TypeCode.String
SqlDataSource1.SelectParameters.Add(sessionParam)
到目前为止,我已尝试使用dbType作为参数而不是类型来转换参数值,转换列,但似乎没有任何工作,我只是得到相同的错误。我怀疑该列是作为int读取的,因为这个列是值的混合所以有些是数字,有些是文本,因此SQL正在进行“有根据的猜测”,该值需要为int
答案 0 :(得分:2)
转换nvarchar值时转换失败'%'到数据类型int
很清楚你有数据类型问题。 '%'
的通配符肯定不是integer
。您可能遇到此问题,因为column
中的where [column] LIKE @param
可能是integer
。因此,即使您将参数标识为string
,它仍然会尝试进行integer
到string
比较。
所以你比较像WHERE Integer LIKE String
那样会引发数据类型转换错误,因为SQL会自动尝试convert
string
到integer
。
如果你想搜索一个数字作为一个看起来不是一个好主意的字符串,你可以解决这个问题:
WHERE CAST([column] AS VARCHAR(10)) LIKE @param.
答案 1 :(得分:1)
如果参数为LIKE
,请不要使用NULL
,而是尝试使用此功能。
SELECT [columns] from [table] where @param is null or [column] = @param
如果传入NULL
参数,则会返回所有内容。如果它不为null,则仅返回列与参数匹配的位置。