sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hanterar dynamiska sql-parametrar

Beroende på den specifika implementeringen har vi två allmänna tillvägagångssätt för detta problem:

1) Bygg dynamiskt filtersatsen för SQL-frågan i kod och hoppar över alla parametrar som är tomma. Detta är den bästa metoden om du tillåter användaren att välja flera värden för en enda kolumn (dvs. välj 0 eller fler av de 50 tillstånden för att filtrera data).

Till exempel:

Förutsatt att txtCondition1 och txtCondition2 är textrutor:

        // 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) Om värdena är mer begränsade skickar vi dem vanligtvis till en lagrad procedur, som är ansvarig för att avgöra om värdet ska utvärderas eller inte genom att testa parametern för "tomhet", antingen null, tom sträng, 0 för numeriska värden osv.



  1. Mysql sträng delad

  2. Hur krymper man temporärt bordsutrymme i Oracle?

  3. Hur räknar man ut procent?

  4. visa mysql newline i HTML