C# 执行可能有一些参数为空的查询

C# 执行可能有一些参数为空的查询,c#,sql,string,C#,Sql,String,让我很快解释我的问题。我用的是整洁的 我必须用Where子句做一个select。该查询的问题是,由于我正在执行筛选查询,因此某些参数可能为空。让我解释清楚一点 在我的应用程序中,可以使用不同的过滤器。您可以选择姓氏、车牌和两个地址 我想创建一个查询,只选择包含所有信息的行,但不强制同时使用所有4个过滤器,因此您可以只使用姓氏,也可以只使用车牌 因此,现在,我使用: string surname = driverComboBox.SelectedItem.ToString(); string ve

让我很快解释我的问题。我用的是整洁的

我必须用Where子句做一个select。该查询的问题是,由于我正在执行筛选查询,因此某些参数可能为空。让我解释清楚一点

在我的应用程序中,可以使用不同的过滤器。您可以选择姓氏、车牌和两个地址

我想创建一个查询,只选择包含所有信息的行,但不强制同时使用所有4个过滤器,因此您可以只使用姓氏,也可以只使用车牌

因此,现在,我使用:

string surname = driverComboBox.SelectedItem.ToString();
string vehiclePlate = vehicleComboBox.SelectedItem.ToString();
string sql = "WHERE"; //Starting point
if (surname != "*" && surname != "") //if he selected a surname
    sql += string.Format(" d.surname LIKE '%{0}%' ", surname); //add to the "WHERE" the string " d.surname LIKE 'surname')
if (vehiclePlate != "*" && vehiclePlate != "") //if he selected a plate
    sql += string.Format(" AND v.plate LIKE '%{0}%' ", vehiclePlate); //add to the sql string " AND v.plate LIKE 'vehiclePlate')
if (sql == "WHERE") //if it was only WHERE, so he didn't select any filter, just pass an empty string
sql = "";
UpdateTableRows(_controllerJourney.GetByFilter(sql)); //this controller just pass a WHERE clause that will append to a SELECT and then show the result on a datagridview, this works fine, so i wont' copy the code.
上述代码(目前有效)的问题在于,可能有更好的方法来实现这一点。例如,如果我只有车辆牌照,sql将

SELECT * FROM random WHERE AND v.plate like ***vehiclePlate***
所以它会抛出一个错误。也就是说,有没有办法创建动态查询


PS:上面的查询只是一个示例,它不是真正的select

这通常通过在
WHERE
子句的开头添加虚拟条件来解决,该条件始终为真

string sql = "WHERE 1=1";
然后,代码的其余部分可以使用
简单地根据需要添加更多条件。如果没有添加其他条件,则不需要删除
WHERE
子句,因为它仍然有效

代码:


哇,太简单了。谢谢你帮助我!
string surname = driverComboBox.SelectedItem.ToString();
string vehiclePlate = vehicleComboBox.SelectedItem.ToString();
string sql = "WHERE 1=1"; //Starting point
if (surname != "*" && surname != "") //if he selected a surname
    sql += string.Format(" AND d.surname LIKE '%{0}%' ", surname);
if (vehiclePlate != "*" && vehiclePlate != "") //if he selected a plate
    sql += string.Format(" AND v.plate LIKE '%{0}%' ", vehiclePlate); 
UpdateTableRows(_controllerJourney.GetByFilter(sql));