0

我正在开发 Windows 应用程序。

我那个,我正在实现搜索功能。

我有 5 个过滤器 [搜索类别]。

Partycode , branchId , Symbol ,BuySell , TerminalId。

如果所有文本框都为空,那么它应该显示所有数据。

如果填写了 Partycode,那么它应该只显示特定派对代码的数据。

如果填写了party code 和 branchId 文本框,那么它应该为具有特定终端 ID 的 particode 提供数据。...并且条件适用于所有排列和组合。

我正在写不同的 if else 语句。这些正在成为许多 If-Else 语句。

有没有针对这种情况编写查询的特殊方法?或者.NET 是否提供任何功能来处理它?

或者我正朝着正确的方向前进[有很多 If-Else 语句]?

我试过了>>

 private void btnRefresh_Click_1(object sender, EventArgs e)
        {
            string SQL = "";
            if ((txtSearchPartyCode.Text == "") && (txtSearchBranchId.Text == "") && (txtSearchSymbol.Text == "") && (txtSearchTerminalId.Text == "")&&(cmbBuySell.Text==""))
            {

                SQL = "select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile";

            }
            else
                if ((txtSearchPartyCode.Text != "") && (txtSearchBranchId.Text == "") && (txtSearchSymbol.Text == "") && (txtSearchTerminalId.Text == "")&&(cmbBuySell.Text==""))    
                {

                        SQL="select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile where Party_Code='"+txtSearchPartyCode.Text+"'";

                }
                else
                    if ((txtSearchPartyCode.Text == "") && (txtSearchBranchId.Text != "") && (txtSearchSymbol.Text == "") && (txtSearchTerminalId.Text == "")&&(cmbBuySell.Text==""))
                    {
                        SQL="select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile where Branch_Id='"+txtSearchBranchId.Text+"'";
                    }
            else
                        if ((txtSearchPartyCode.Text == "") && (txtSearchBranchId.Text == "") && (txtSearchSymbol.Text != "") && (txtSearchTerminalId.Text == "")&&(cmbBuySell.Text==""))
                        {
                            SQL="select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile where Scrip_Code='"+txtSearchSymbol.Text+"'";
                        }
            else
                        if ((txtSearchPartyCode.Text == "") && (txtSearchBranchId.Text == "") && (txtSearchSymbol.Text == "") && (txtSearchTerminalId.Text != "")&&(cmbBuySell.Text==""))
                        {
                            SQL="select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile where TerminalId='"+txtSearchTerminalId.Text+"'";
                        }
            else
                            if((txtSearchPartyCode.Text == "") && (txtSearchBranchId.Text == "") && (txtSearchSymbol.Text == "") && (txtSearchTerminalId.Text == "")&&(cmbBuySell.Text!=""))
                            {
                                float buy_Sell=0;
                                if(cmbBuySell.Text=="Buy")
                                    buy_Sell=1;
                                else
                                    if(cmbBuySell.Text=="Sell")
                                        buy_Sell=2;
                                SQL="select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile where Buy_Sell='"+buy_Sell+"'";
                            }

                   try
                   {
                    da = new SqlDataAdapter(SQL, con);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    gvTradeFile.DataSource = ds.Tables[0];
                   }
                   catch(Exception ex)
                   {
                       MessageBox.Show(ex.Message);
                   }
        }

请把我拉出来!!!!

4

6 回答 6

3

首先,直接回答您的问题:

private void btnRefresh_Click_1(object sender, EventArgs e)
{
    var sb = new StringBuilder("select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile");
    if (!string.IsNullOrEmpty(txtSearchPartyCode.Text))
        sb.AppendFormat(" where Party_Code='{0}'", txtSearchPartyCode.Text);
    if (!string.IsNullOrEmpty(txtSearchBranchId.Text))
        sb.AppendFormat(" where Branch_Id='{0}'", txtSearchBrandId.Text);
    // ...and so on...
    sb.Append(";");
    try
    {
        da = new SqlDataAdapter(sb.ToString(), con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        gvTradeFile.DataSource = ds.Tables[0];
    }
    catch(Exception ex)
    {
       MessageBox.Show(ex.Message);
    }
}

将您的代码更改为这样的代码,您的生活可能会更轻松一些。

其次,一些建议。您的代码表明您是一个新手,花一些时间阅读有关使用数据库的更好方法可能是值得的。有数据库包装器,你可以使用它们,像这样直接查询数据库可能不是最好的主意。你还需要清理你的用户输入,你的代码容易受到 SQL 注入的影响(一个好的数据库包装器会为你做这件事)。

于 2013-03-22T07:49:28.683 回答
1

制作一行代码来调用您的 sql 语句来构建,然后将 if not blank 添加到 sql 语句中。Partycode , branchId , Symbol ,BuySell , TerminalId. 还将您的搜索功能更改为 like 语句,因此它不是那么二进制。

select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,
TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo 
from tradeFile 
where Party_Code like '&"+txtSearchPartyCode.Text+"&'";**
于 2013-03-22T07:45:33.140 回答
1

首先,尝试至少为数据访问重构您的代码。你现在的班级做得很多。

1-至少将您的数据访问代码重构为一些帮助程序类

2-尝试将SQL创建的责任转移到其他一些帮助类中。

3- 创建一个包含所有搜索参数的参数类,将此参数对象传递给 SQL 创建类。

4- 阅读建造者模式

于 2013-03-22T07:45:55.170 回答
1

动态创建查询

Select * from TableName where "+ColumnName+"="'"+txtSearch.Text+"'" // Example

从 txtSearch 文本框名称中识别您的 ColumnName

希望这可以帮助

于 2013-03-22T07:47:03.740 回答
0

您可能想尝试这样的事情:

private void btnRefresh_Click_1(object sender, EventArgs e)
    {
        string WHERE_STATEMENT = null;
        string SEARCH = null;
        string SQL = null;
        int i = 1;

        switch (i)
        {
            case 1:
                WHERE_STATEMENT = "Party_Code";
                SEARCH = "";
            case 2:
                WHERE_STATEMENT = "Branch_Id";
                SEARCH = "";
            case 3:
                WHERE_STATEMENT = "Scrip_Code";
                SEARCH = "";
            case 4:
                WHERE_STATEMENT = "TerminalId";
                SEARCH = "";
            case 5:
                WHERE_STATEMENT = "BUY_SELL";
                SEARCH = "";
            case 6:
                WHERE_STATEMENT = "";
                SEARCH = "";
        }

        try 
            {           
                SQL = "select Party_Code,TradeNo,Scrip_Code,Inst_Type,Expirydate,Strike_price,Option_type,TerminalId,Branch_Id,Buy_Sell,Trade_Qty,Market_Rate,Sauda_Date,OrderNo from tradeFile where " + WHERE_STATEMENT + " like '%" + SEARCH + "%'";
                da = new SqlDataAdapter(SQL, con);
                DataSet ds = new DataSet();
                da.Fill(ds);
                gvTradeFile.DataSource = ds.Tables[0];
            }
       catch (Exception)
            {
                MessageBox.Show(ex.Message);
                throw;
            }

    }
于 2013-03-22T08:31:54.253 回答
0

Select * from TableName where "+ColumnName+"="'"+txtSearch.Text+"'"// 例子

于 2013-05-31T04:54:28.883 回答