如何在“WHERE column-name = value”和“WHERE column-name IS NOT NULL”之间动态切换

时间:2016-01-24 06:16:58

标签: c# sqlite dynamic parameters

我正在用C#创建一个小的Visual Studio Windows窗体应用程序,我使用SQLite作为我的数据库。假设数据库存储学校俱乐部成员的数据,并且它们具有他们所处的州的值。我正在尝试创建参数化查询字符串,以便如果用户在我的程序中选择“所有状态”,那么它将加载所有成员。但如果他们选择一个特定的州,那么它只会显示生活在该州的成员。在使用参数化查询字符串时,如何在WHERE USstate IS NOT NULLstring queryString = @"Select * from Membership WHERE USstate = @state;"; List<SQLiteParameter> paramList = new List<SQLiteParameter>(); paramList = addStateParam(paramList); private List<SQLiteParameter> addStateParam(List<SQLiteParameter> paramList) { if (!checkBoxFilterAllStates.Checked) { string selectedState = comboBoxFilterState.Items[comboBoxFilterState.SelectedIndex].ToString(); var usState = new SQLiteParameter("@state", selectedState); paramList.Add(usState); } else { var usState = new SQLiteParameter("@state", "IS NOT NULL"); paramList.Add(usState); } return paramList; } 之间动态切换?我希望动态选择状态的值,但如果选择“所有状态”(复选框),则应显示数据库中的所有记录。

对我不起作用的代码示例:

USstate = @state

我尝试将USstate @state更改为@state,然后将"= " + selectedState替换为IS NOT NULL@state,但如果之前没有等号IS NOT NUll,每次都会出现语法或逻辑错误。但是,如果我保留等号,那么{{1}}代码将无效。

如何动态修复此问题?提前致谢!对不起,如果我太冗长或多余。

3 个答案:

答案 0 :(得分:0)

Select * from Membership WHERE USstate = @state

将此更改为

Select * from Membership WHERE USstate like @state

之后

var usState = new SQLiteParameter("@state", selectedState);

var usState = new SQLiteParameter("@state","%"+selectedState+"%");

最后

var usState = new SQLiteParameter("@state", "IS NOT NULL");

var usState = new SQLiteParameter("@state", "%");

答案 1 :(得分:0)

如果未选中该复选框,则您将拥有&gt; UsState = IS NOT NULL 你不能用“=” - Operator来检查它。如果你使用带有choosetring的sqlite命令作为命令文本,你可以这样做:

  

SQLiteCommand cmd = new SQLiteCommand(Selectingtring);   cmd.Parameters.AddWithValue(“@ state”,“=”+ state);

或者

  

cmd.Parameters.AddWithValue(“@ state”,“IS NOT NULL”);

答案 2 :(得分:0)

如果查询中有WHERE USstate = @state,则会将列值与作为参数传递的字符串值进行比较。 (这是参数的全部目的,以避免被解释为SQL命令。)

您必须更改查询本身:

if (!checkBoxFilterAllStates.Checked)
{
    queryString = @"Select * from Membership WHERE USstate = @state;";
    ...
    paramList.Add(usState);
}
else
{
    queryString = @"Select * from Membership WHERE USstate IS NOT NULL;";
}