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.