0

私はWindowsアプリケーションを開発しています。

私は、検索機能を実装しています。

5つのフィルター[検索カテゴリー]があります。

Partycode、branchId、Symbol、BuySell、TerminalId。

このためのすべてのテキストボックスが空の場合、すべてのデータが表示されます。

Partycodeが入力されている場合は、特定のパーティコードのデータのみが表示されます。

パーティコードとbranchIdテキストボックスが入力されている場合は、特定の端末IDを持つparticodeのデータを提供する必要があります。...そして、条件はすべての順列と組み合わせに対して続きます。

私は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

まず第一に、少なくともデータアクセスのためにコードをリファクタリングしてみてください。あなたの現在のクラスは多くのことをしています。

1- データ アクセス コードを少なくともいくつかのヘルパー クラスにリファクタリングする

2- SQL 作成の責任を他のヘルパー クラスに移してみてください。

3- すべての検索パラメーターを保持するパラメーター クラスを作成し、このパラメーター オブジェクトを SQL Creation クラスに渡します。

4- Builder パターンについて読む

于 2013-03-22T07:45:55.170 に答える
1

クエリを動的に作成する

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

txtSearchテキストボックス名からColumnNameを特定します

お役に立てれば

于 2013-03-22T07:47:03.740 に答える
1

SQL ステートメントを呼び出してビルドするコードを 1 行作成し、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 に答える
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 に答える