【问题标题】:Database Schema in SqlDataSourceSqlDataSource 中的数据库架构
【发布时间】:2019-03-02 10:05:30
【问题描述】:

我试图让用户在文本框中使用名字或学生 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 条件?

【问题讨论】:

  • 你能告诉我们你分配参数的代码吗?我猜你只是从 UI 获得一个输入,但你在查询中使用了两个参数。
  • @MauricioAtanache 我正在使用 sqldatasource 检索表 student 并将其显示到 gridview 中。在sqldatasource中配置select语句时,我select *点击WHERE按钮添加条件。

标签: c# asp.net gridview sqldatasource


【解决方案1】:

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

首先,假设我通过SID 进行搜索,并将名字字段留空。这将导致如下表达式:

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

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

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

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

【讨论】:

  • 嗨,我可以使用 thisSELECT * FROM [student] WHERE (([FName] LIKE '%' + @FName + '%') 按名字搜索。但是,当我在 sqldatasource 中添加另一个条件时,它迫使我这样做SELECT * FROM [student] WHERE (([FName] LIKE '%' + @FName + '%') AND ([SID] = @SID))" 这意味着我无法使用 SID 或名字进行搜索
  • 一直想把AND改成OR,结果却是input string format is wrong
【解决方案2】:

如果您只收到一个搜索参数(Google 样式),您的 SQL 查询应该如下所示:

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

    • SID 是数据库中的Int。实际上我使用SqlDataSource配置了select语句,当我在WHERE子句中添加多个条件时,select语句将变为WHERE condition1 AND condition2 AND condition3而不是OR
    • 如果您以编程方式修改参数,请注意使用默认值,不要意外重新声明新参数。
    猜你喜欢
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2018-07-15
    相关资源
    最近更新 更多