sql >> Database >  >> RDS >> Sqlserver

Hoe om te gaan met dynamische sql-parameters

Afhankelijk van de specifieke implementatie hebben we twee algemene benaderingen voor dit probleem:

1) Bouw de filterinstructie voor de SQL-query dynamisch in code en sla alle parameters over die leeg zijn. Dit is de beste aanpak als u de gebruiker toestaat meerdere waarden voor een enkele kolom te selecteren (d.w.z. selecteer 0 of meer van de 50 staten om de gegevens te filteren).

Bijvoorbeeld:

Ervan uitgaande dat txtCondition1 en txtCondition2 tekstvakken zijn:

        // 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) Als de waarden meer beperkt zijn, geven we ze meestal door aan een opgeslagen procedure, die verantwoordelijk is voor het bepalen of de waarde al dan niet moet worden geëvalueerd door de parameter te testen op "leegte", ofwel null, lege tekenreeks, 0 voor numeriek , enz.



  1. PHP MySQL-datumvergelijking

  2. Hoe kan ik alle tijd tussen 2 verschillende tijdparameters weergeven?

  3. Doe wiskunde in MySQL vanuit SELECT

  4. Hoe SQL-cursors voor speciale doeleinden te gebruiken