コード例 #1
0
        public static void SearchForMedicine()
        {
            //To do:
            //0. działa, ale do zmiany,
            //1. dodać zależność między typem a operatorem,
            //2. dodać dynamiczne generowanie poszczególnych list wyborów,
            //3. dodać mozliwość wyboru filtrowania po więcej niż jednym polu

            Console.WriteLine("Pola dostępne dla leków: ");
            Console.WriteLine(" 1. ID");
            Console.WriteLine(" 2. Nazwa");
            Console.WriteLine(" 3. Producent");
            Console.WriteLine(" 4. Cena");
            Console.WriteLine(" 5. Ilosc");
            Console.WriteLine(" 6. Na receptę");
            int fieldNum = Ask.ForIntListItem("Wybierz pole: ", 1, 6);

            Console.WriteLine();

            Console.WriteLine("Operatory dostępne podczas wyszukiwania: ");
            Console.WriteLine(" 1. Równy");
            Console.WriteLine(" 2. Różny");
            Console.WriteLine(" 3. Zawiera");
            Console.WriteLine(" 4. Zakres/Pomiędzy");
            Console.WriteLine(" 5. Większy");
            Console.WriteLine(" 6. Większy równy");
            Console.WriteLine(" 7. Mniejszy");
            Console.WriteLine(" 8. Mniejszy równy");
            int conditionNum = Ask.ForIntListItem("Wybierz operator: ", 1, 8);

            string selectedField    = "";
            string selectedOperator = "";
            object givenValue;
            object givenValue2;
            var    sqlParam = new List <SqlParameter>();


            switch (fieldNum)
            {
            default:
                selectedField = "ID";
                if (conditionNum == 4)
                {
                    givenValue  = Ask.ForInt("Podaj wartość od: ");
                    givenValue2 = Ask.ForInt("Podaj wartość do: ");

                    sqlParam.Add(new SqlParameter()
                    {
                        ParameterName = "@" + selectedField.ToLower() + "To",
                        Value         = givenValue2
                    });

                    break;
                }
                givenValue = Ask.ForInt("Podaj wartość: ");
                break;

            case 2:
                selectedField = "Name";
                if (conditionNum == 4)
                {
                    givenValue  = Ask.ForString("Podaj wartość od: ");
                    givenValue2 = Ask.ForString("Podaj wartość do: ");

                    sqlParam.Add(new SqlParameter()
                    {
                        ParameterName = "@" + selectedField.ToLower() + "To",
                        Value         = givenValue2
                    });
                    break;
                }
                givenValue = Ask.ForString("Podaj wartość: ");
                break;

            case 3:
                selectedField = "Manufacturer";
                if (conditionNum == 4)
                {
                    givenValue  = Ask.ForString("Podaj wartość od: ");
                    givenValue2 = Ask.ForString("Podaj wartość do: ");

                    sqlParam.Add(new SqlParameter()
                    {
                        ParameterName = "@" + selectedField.ToLower() + "To",
                        Value         = givenValue2
                    });
                    break;
                }
                givenValue = Ask.ForString("Podaj wartość: ");
                break;

            case 4:
                selectedField = "Price";
                if (conditionNum == 4)
                {
                    givenValue  = Ask.ForDecimal("Podaj wartość od: ");
                    givenValue2 = Ask.ForDecimal("Podaj wartość do: ");

                    sqlParam.Add(new SqlParameter()
                    {
                        ParameterName = "@" + selectedField.ToLower() + "To",
                        Value         = givenValue2
                    });
                    break;
                }
                givenValue = Ask.ForDecimal("Podaj wartość: ");
                break;

            case 5:
                selectedField = "Amount";
                if (conditionNum == 4)
                {
                    givenValue  = Ask.ForString("Podaj wartość od: ");
                    givenValue2 = Ask.ForString("Podaj wartość do: ");

                    sqlParam.Add(new SqlParameter()
                    {
                        ParameterName = "@" + selectedField.ToLower() + "To",
                        Value         = givenValue2
                    });
                    break;
                }
                givenValue = Ask.ForString("Podaj wartość: ");
                break;

            case 6:
                selectedField = "WithPrescription";
                if (conditionNum == 4)
                {
                    givenValue  = Ask.ForBool("Podaj wartość od: ");
                    givenValue2 = Ask.ForBool("Podaj wartość do: ");

                    sqlParam.Add(new SqlParameter()
                    {
                        ParameterName = "@" + selectedField.ToLower() + "To",
                        Value         = givenValue2
                    });
                    break;
                }
                givenValue = Ask.ForBool("Podaj wartość: ");
                break;
            }

            switch (conditionNum)
            {
            default:
                selectedOperator = " = #field#";
                break;

            case 2:
                selectedOperator = " <> #field#";
                break;

            case 3:
                selectedOperator = " like '%'+#field#+'%'";
                break;

            case 4:
                selectedOperator = " between #field# and #field2#";
                break;

            case 5:
                selectedOperator = " > #field#";
                break;

            case 6:
                selectedOperator = " >= #field#";
                break;

            case 7:
                selectedOperator = " < #field#";
                break;

            case 8:
                selectedOperator = " <= #field#";
                break;
            }

            sqlParam.Add(new SqlParameter()
            {
                ParameterName = "@" + selectedField.ToLower(),
                Value         = givenValue
            });

            string whereClausule = " where " + selectedField + selectedOperator.Replace("#field#", "@" + selectedField.ToLower()).Replace("#field2#", "@" + selectedField.ToLower() + "To");

            DisplayMedicineList(Medicine.Search(whereClausule, sqlParam.ToArray()));
        }