ASP.Net执行SQL(sub)-Query

时间:2011-04-04 01:56:41

标签: c# asp.net

我目前正在尝试通过使用ASP.net和MYSQL创建的网站创建“搜索引擎”,我对两者都很新,我遇到了这个问题。我创建了一个用户输入页面,以便他们可以通过键入一个或所有不同的搜索字段进行搜索。 (制作,模型,颜色,..等。)根据用户提供的这些信息,根据输入的字段创建SQL子查询进行搜索的最佳方法是什么。我环顾四周,看到了很多解决方案只写一个UNION调用,其中一个param是NULL,但我宁愿不做8!获取所有可能性所需的SQL查询。如果有人有一个非常感谢的建议。

1 个答案:

答案 0 :(得分:1)

没有看到架构,我们无法肯定地说,但我不相信你需要一个子查询。搜索可以通过强制用户通过下拉列表选择品牌,模型等来工作。在这种情况下,您需要的是基于所选标准的一系列AND语句:

Select ...
From MyTable
Where Make = @Make
    And Model = @Model
    ...

您将根据用户提出的参数(不包括未指定的参数)在C#代码中构建此SQL语句。即,如果用户没有选择模型,则不会包含该And语句。


您的SQL汇编代码可能类似于

private function Search( string make, string model, ... )
{
    var sql = new StringBuilder();
    sql.AppendLine( "Select .... " );
    sql.AppendLine( "From MyTable" );
    sql.AppendLine( "Where 1=1" ); //this is just to add the Where keyword

    var parameters = List<DbParameter>();
    if ( !string.IsNullOrEmpty( make ) )
    {
        sql.AppendLine( " And Make = @Make " );
        parameters.AddWithValue( "@Make", make );
    }

    if ( !string.IsNullOrEmpty( model ) )
    {
        sql.AppendLine( " And Model = @Model " );
        parameters.AddWithValue( "@Model", model );
    }
    ...
}

另一个方法是简单地构建检查空值的整个SQL语句:

var sql = new StringBuilder();
sql.AppendLine( "Select .... " );
sql.AppendLine( "From MyTable" );
sql.AppendLine( "Where ( @Make Is Null Or Make = @Make" )
sql.AppendLine( "   And ( @Model Is Null Or Model = @Model" )
...