【问题标题】:Cant Search SQL DB from Front End无法从前端搜索 SQL DB
【发布时间】:2014-08-09 22:49:24
【问题描述】:

我在 Webmatrix 中创建了一个数据库,它是一个名为 Fish 的表。它存储了许多鱼,它们在哪里被捕获,它们是如何被捕获的等等。我也在 Webmatrix 中创建了一个前端,以便可以搜索数据库。当我在搜索框中输入一条鱼然后点击搜索时,它会抛出一个我无法弄清楚的错误。我的数据库称为“采购矩阵”,表称为“鱼”。这是我为搜索功能所做的代码;

@{ var db = Database.Open("采购矩阵"); var selectCommand = "SELECT * FROM Fish"; var searchTerm = "";

    if(!Request.QueryString["searchField"].IsEmpty() ) {
selectCommand = "SELECT * FROM Fish WHERE Fish = @0";
searchTerm = Request.QueryString["searchField"];
}

if(IsPost){
 var selectedData = db.Query(selectCommand, searchTerm);
} } <h1>Search for Fish stored in the Database</h1>

搜索: 搜索

@if(!Request.QueryString["searchField"].IsEmpty() ){
        foreach(var row in db.Query(selectCommand, searchTerm)) {
          <div class="col_12 box">
             <form method="post">
                   <!--Entry in Search box-->
              </form>
          </div>
         }
} else { 
          <div class="col_12 box">
             <form method="post">
                  <!--No entry in Search Box-->
              </form>
          </div>
  }

这是返回的错误:

列名无效。 [节点名称(如果有)=,列名称= Fish ] 描述:在运行过程中发生了未处理的异常 执行当前的 Web 请求。请查看堆栈跟踪 有关错误及其起源的更多信息 代码。

异常详细信息:System.Data.SqlServerCe.SqlCeException:列 名称无效。 [节点名称(如果有)=,列名称=鱼]

来源错误:

第 25 行:第 26 行:
@if(!Request.QueryString["searchField"].IsEmpty()){ 第 27 行:
foreach(var row in db.Query(selectCommand, searchTerm)) { 第 28 行:
第 29 行:

我尝试了各种不同的列名,它们阻止了错误的发生,但它们也不会返回任何结果。唯一对我来说似乎合乎逻辑的事情是让整个表格可供选择,以防搜索通用名称、拉丁名称或捕获区域,而不仅仅是来自一列的信息。

【问题讨论】:

    标签: html sql webmatrix


    【解决方案1】:

    您的问题涉及 sql SELECT 语句的 WHERE 子句:SQL WHERE Clause

    WHERE 子句接受许多比较运算符,但始终必须指定要搜索的列并使用 OR 运算符链接许多搜索条件。

    另一个问题是 = 运算符搜索完全匹配;如果要搜索模式,则必须使用带有“%”符号的 LIKE 运算符来定义模式前后的通配符(缺少字母)。

    因此,如果您的 Fish 表有一个名为“common name”的列和一个名为“latin name”的列,并且您想要搜索在两列之一中包含给定模式的所有行,您的代码应该是:

    selectCommand = "SELECT * FROM Fish WHERE [common name] LIKE @0 OR [latin name] LIKE @0";
    searchTerm = "%" + Request.QueryString["searchField"] + "%";
    

    已编辑

    最终的 OR 可能会产生您的错误。您的查询应以“.... OR [Reason] LIKE @0”结尾。我建议尝试使用有限数量的字段进行搜索并测试它是否有效,然后逐渐添加其他字段。

    无论如何,通常不会以这种方式搜索关系数据库。有一些功能(如 SQL Server 全文搜索)或产品(如 Apache Solr)或数据库类别(如非关系数据库)可以更好地实现这一目标。

    有关使用 WebMatrix 过滤 Sql Ce 表的“标准方法”,请查看这篇好文章:Displaying Search Results In A WebGrid

    【讨论】:

    • 感谢您的帮助 - 我知道我哪里出错了。我切换了行并添加了额外的列,但仍然出现错误,但现在显示为:解析查询时出错。 [token line number = 1,token line offset = 516,Token in error = OR] 说明:当前web请求执行过程中出现未处理的异常。
    • 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.Data.SqlServerCe.SqlCeException:解析查询时出错。 [令牌行号 = 1,令牌行偏移量 = 516,错误令牌 = OR ] 第 25 行:第 26 行:@if(!Request.QueryString["searchField"].IsEmpty()){ 第 27 行:foreach(var row在 db.Query(selectCommand, searchTerm)) { 第 28 行:
      第 29 行:
    • @Cozak 请发布您的 sql 查询(您的 selectCommand 变量的内容)
    • 抱歉回复慢 - selectCommand = "SELECT * FROM Fish WHERE [通用名] LIKE @0 OR [拉丁名] LIKE @0 OR [生产方法] LIKE @0 OR [捕捞区] LIKE @0 或 [生产国(养殖)] LIKE @0 或 [区域详情] LIKE @0 或 [库存详情] LIKE @0 或 [捕获/生产方法] LIKE @0 或 [认证] LIKE @0或 [认证机构] LIKE @0 或 [MSC 评级] LIKE @0 或 [其他评级] LIKE @0 或 [SHL 来源?] LIKE @0 或 [原因] LIKE @0 或";
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签