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);
}