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:输入字符串的格式不正确。

请帮忙。为什么我不能在 SqlDataSource 控件中放置 OR 条件?

在这里要小心。我看到查询中的错误。

首先,假设我按SID搜索,并将名字字段留空。这将产生如下表达式:

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

这是一个OR条件,左侧将匹配任何内容。它将始终返回所有记录。我还建议使 SID 搜索完全匹配。如果您有学生的 ID 号,则您拥有整个ID 号。

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

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

如果您只接收一个搜索参数(Google Style(,则 SQL 查询应如下所示:

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

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

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

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

另一件事,如果你的SID是一个整数,你不能在sqlserver中使用LIKE运算符,你必须把它强制转换为varchar

最新更新