SqlDataSource中的数据库架构

时间:2018-09-26 15:07:10

标签: c# asp.net gridview sqldatasource

我正在尝试让用户使用文本框中的名字或学生ID搜索学生。搜索结果将显示在GridView控件中。

这是我的HTML SelectCommand

SelectCommand="SELECT * FROM [student] WHERE (([FName] LIKE '%' + @FName + '%') AND ([SID] = @SID))

但是,上面的行要求用户同时输入名字和学生ID进行搜索。我一直在尝试将其更改为:

SelectCommand="SELECT * FROM [student] WHERE (([FName] LIKE '%' + @FName + '%') OR([SID] LIKE '%' + @SID + '%'))">

但是它不起作用。错误提示

  

System.FormatException:输入字符串的格式不正确。

PLS帮助。为什么我不能将OR条件放在SqlDataSource控件中?

3 个答案:

答案 0 :(得分:0)

在这里要小心。我发现查询中有错误。

首先,假设我按SID搜索,并将名字字段留空。这将导致这样的表达式:

WHERE FName LIKE '%%' OR SID LIKE '%1234%'

这是一个OR条件,其中左侧将匹配任何内容。它会总是返回记录的全部。我还建议使SID搜索完全匹配。如果您有一个学生的ID号,那么您就有了整个 ID号。

第二,SID可能是数字/整数字段。 ASP.Net需要能够将您的SID输入转换为数字,即使该输入为空字符串也是如此。这是您的错误消息的来源。

我的建议是在回发期间为您处理运行此查询的任何事件设置数据源的SQL CommandText。构建字符串,使其仅包含用户实际提供的字段的条件。 仍然使用用户参数化查询来执行此操作。

答案 1 :(得分:0)

如果仅接收一个搜索参数(Google样式),则SQL查询应类似于:

SELECT * FROM [student] WHERE (([FName] LIKE '%' + @searchPattern + '%') OR 
([SID] = @searchPattern )

答案 2 :(得分:0)

尝试用名称反转SID,另一件事检查@SID参数是整数,它必须是字符串,在数据库中[SID]是varchar吗?

如果您以编程方式修改参数,请注意使用默认值,而不要意外地重新声明新参数。

SqlDataSource1.SelectParameters["SID"].DefaultValue = "123";

另一件事,如果您的SID是整数,则不能在sqlserver中使用LIKE运算符,则必须将其强制转换为varchar