sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan håndteres dynamiske sql-parametre

Afhængigt af den specifikke implementering har vi to generelle tilgange til dette problem:

1) Byg dynamisk filtersætningen til SQL-forespørgslen i kode og spring eventuelle parametre over, der er tomme. Dette er den bedste tilgang, hvis du tillader brugeren at vælge flere værdier for en enkelt kolonne (dvs. vælg 0 eller flere af de 50 tilstande for at filtrere dataene).

For eksempel:

Forudsat at txtCondition1 og txtCondition2 er tekstbokse:

        // 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) Hvis værdierne er mere begrænsede, sender vi dem normalt til en lagret procedure, som er ansvarlig for at bestemme, om værdien skal evalueres eller ej, ved at teste parameteren for "tomhed", enten null, tom streng, 0 for numeriske osv.



  1. Kodning af parameter-værdi for SELECT i PHP-MySQL

  2. mysql_query():hvordan man kontrollerer, om nogen rækker er opdateret i tilfælde af UPDATE SQL

  3. Sådan fungerer MySQL-ufølsomme for store og små bogstaver og accentufølsomme i UTF-8

  4. Hvordan gemmer man en data med varierende komma i karakter, der passerer gennem en trigger?