C# 筛选数据库

C# 筛选数据库,c#,sql,asp.net,C#,Sql,Asp.net,我需要根据用户在asp.netweb应用程序中的4列输入来过滤sql数据库。在这种情况下,他们可以选择或不选择全部四列或一列或两列,等等。我所拥有的只是2^4(16)种可能性。过滤的最佳方法是什么 我的gui屏幕截图: 请引导我 我编写了一个查询,以选择以下四个选项之一: SELECT acct_number AS AccountNo, cust_lname AS Name FROM List WHERE (ordr_date='" + orderdate + "' OR

我需要根据用户在
asp.net
web应用程序中的4列输入来过滤
sql
数据库。在这种情况下,他们可以选择或不选择全部四列或一列或两列,等等。我所拥有的只是2^4(16)种可能性。过滤的最佳方法是什么

我的
gui
屏幕截图:

请引导我

我编写了一个查询,以选择以下四个选项之一:

SELECT acct_number AS AccountNo,
    cust_lname AS Name 
FROM List 
WHERE (ordr_date='" + orderdate + "' 
    OR reader_code='" + rdrCode + "' 
    OR dly_pack_no='" + dlyPack + "' 
    OR walk_seq='" + wlkSeq + "')
尝试下面的查询

SELECT  acct_number AS AccountNo ,
    cust_lname AS Name
FROM    List
WHERE   ( ordr_date = '" + orderdate + "'
      OR " + orderdate + " = " + orderdate + "
    )
    AND ( reader_code = '" + rdrCode + "'
          OR " + rdrCode + " = " + rdrCode + "
        )
    AND ( dly_pack_no = '" + dlyPack + "'
          OR " + dlyPack + " = " + dlyPack + "
        )
    AND ( walk_seq = '" + wlkSeq + "'
          OR " + wlkSeq + " = " + wlkSeq + "
        )

动态构建
WHERE
-子句并使用参数

SqlCommand select =  new SqlCommand(@"SELECT acct_number AS AccountNo,
    cust_lname AS Name 
    FROM List ");

if(!string.IsNullOrWhiteSpace(orderDate)) // use appropriate logic according to data type. I'm assuming string atm.
select.Parameters.Add(new SqlParameter() { ParameterName = "@ordr_date", Value = orderDate, SqlDbType = SqlDbType.NVarChar });

 // Repeat for each parameter and then...

 for(int i = 0; i < select.Parameters.Count; i++)
 {
     if(i == 0)
         select.CommandText += " WHERE ";
     else
         // OR as in the filter is not exclusive... depends on the filter logic you want to construct of course. 
         // AND if it has to fulfill all properties
         select.CommandText += " OR ";
     select.CommandText += string.Format("{0} = {0}", select.Parameters[i].Name).Substring(1);
 }
SqlCommand select=newsqlcommand(@“选择账号作为账号,
客户名称作为名称
从名单中删除);
如果(!string.IsNullOrWhiteSpace(orderDate))//根据数据类型使用适当的逻辑。我假设是自动取款机。
select.Parameters.Add(新的SqlParameter(){ParameterName=“@ordr_date”,Value=orderDate,SqlDbType=SqlDbType.NVarChar});
//对每个参数重复此操作,然后。。。
对于(int i=0;i
您能显示您当前的查询吗?Yeeks!请使用参数化查询,因为这容易导致SQL注入。如果使用SQL,请查看(Case-When-Then-End)方法server@ARUN,目前,我在OP的查询中看不到任何连接,也看不到过程的意义,这在其他情况下肯定是最好的方法。@ARUN存储过程不会神奇地使查询按数量级排序更快。它们可以节省一些编译时间,因为它们是预编译的(通常),但主要的好处是封装来自调用者的难看查询。。它不排序。总是给出相同的结果。试着用下面给出的答案来回答我的问题。哪个答案比我的更合适。为什么是
?为什么“{1}”?Thx,
{0}
当然是两次了<代码>或
在筛选器中不是独占的。。。当然,这取决于您想要构造的过滤器逻辑<代码>和
如果它必须满足所有属性…Thx,它工作正常!
SqlCommand select =  new SqlCommand(@"SELECT acct_number AS AccountNo,
    cust_lname AS Name 
    FROM List ");

if(!string.IsNullOrWhiteSpace(orderDate)) // use appropriate logic according to data type. I'm assuming string atm.
select.Parameters.Add(new SqlParameter() { ParameterName = "@ordr_date", Value = orderDate, SqlDbType = SqlDbType.NVarChar });

 // Repeat for each parameter and then...

 for(int i = 0; i < select.Parameters.Count; i++)
 {
     if(i == 0)
         select.CommandText += " WHERE ";
     else
         // OR as in the filter is not exclusive... depends on the filter logic you want to construct of course. 
         // AND if it has to fulfill all properties
         select.CommandText += " OR ";
     select.CommandText += string.Format("{0} = {0}", select.Parameters[i].Name).Substring(1);
 }