sql >> Databáze >  >> RDS >> Sqlserver

Jak zacházet s dynamickými parametry SQL

V závislosti na konkrétní implementaci máme k tomuto problému dva obecné přístupy:

1) Dynamicky sestavte příkaz filtru pro dotaz SQL v kódu a vynechejte všechny parametry, které jsou prázdné. Toto je nejlepší přístup, pokud uživateli umožníte vybrat více hodnot pro jeden sloupec (tj. vybrat 0 nebo více z 50 stavů pro filtrování dat).

Například:

Za předpokladu, že txtCondition1 a txtCondition2 jsou textová pole:

        // Assuming conn is an open SqlConnection

        System.Text.StringBuilder sbSQL = new StringBuilder(500);

        List<SqlParameter> cParameters = new List<SqlParameter>();

        // Add a default condition of 1=1 so that all subsequent conditions can be added 
        // with AND instead of having to check to see whether or not any other conditions
        // were added before adding AND.
        sbSQL.Append("SELECT * FROM MyTestTable WHERE 1 = 1 ");

        if (!String.IsNullOrEmpty(txtCondition1.Text)) {
            sbSQL.Append(" AND Column1 = @Column1");
            cParameters.Add(new SqlParameter("@Column1", txtCondition1.Text));
        }
        if (!String.IsNullOrEmpty(txtCondition1.Text))
        {
            sbSQL.Append(" AND Column2 = @Column2");
            cParameters.Add(new SqlParameter("@Column2", txtCondition2.Text));
        }

        SqlCommand oCommand = new SqlCommand(sbSQL.ToString, conn);
        if (cParameters.Count != 0) 
        {
            oCommand.Parameters.AddRange(cParameters.ToArray());
        } 

        // Do something with oCommand

2) Pokud jsou hodnoty omezenější, obvykle je předáme uložené proceduře, která je zodpovědná za určení, zda má být hodnota vyhodnocena, testováním parametru na "prázdnoty", buď null, prázdný řetězec, 0 pro numerické hodnoty. , atd.



  1. Můžeme mít více WITH AS v jednom SQL - Oracle SQL

  2. Převod řetězce data/času na unixové časové razítko v MySQL

  3. Je připojení k databázi v této třídě znovu použitelné?

  4. co jsou materializované názory v orákulu?