无法从前端搜索SQL DB

时间:2014-06-19 11:51:37

标签: html sql webmatrix

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

  

@ {       var db = Database.Open(" Sourcing Matrix");       var selectCommand =" SELECT * FROM Fish&#34 ;;       var searchTerm ="&#34 ;;

    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 [&#34; searchField&#34;] .IsEmpty()){Line 27:
  foreach(db.Query中的var行(selectCommand,searchTerm)){第28行:
   第29行:

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

1 个答案:

答案 0 :(得分:0)

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

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

另一个问题是=运算符搜索完全匹配;如果要搜索模式,则必须使用LIKE运算符和&#34;%&#34;用于在模式之前和之后定义通配符(缺少字母)的符号。

因此,如果你的Fish表有一个名为&#34的列;通用名&#34;和一个名为&#34的列;拉丁名&#34;并且您希望在两列中的一列中搜索包含给定模式的所有行,您的代码应为:

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

<强>被修改

您的错误可能是由最终的OR产生的。您的查询应以&#34; ....或[Reason] LIKE @ 0&#34;结束。我建议尝试搜索有限数量的字段并测试它是否有效,逐渐添加其他字段。

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

对于&#34;标准方式&#34;使用WebMatrix过滤Sql Ce表请查看这篇好文章:Displaying Search Results In A WebGrid