c# - 从列 = 任何值的表中选择

标签 c# mysql ado.net

我正在尝试创建一个按 3 列过滤列表的查询:

age = "2";
gender = "male";
race = "pitbull";

MySqlCommand tempCommand = _DbHandler.CreateCommand("SELECT * FROM dogs WHERE age = @age AND gender = @gender AND race = @race");
tempCommand.Parameters.AddWithValue("@age", age);
tempCommand.Parameters.AddWithValue("@gender", gender);
tempCommand.Parameters.AddWithValue("@race", race);

MySqlDataReader tempReader = tempCommand.ExecuteReader();

我希望能够让性别列获取任何值,如果这有效的话: 性别 = "*";

如何在一次查询中实现这一目标?

年龄、性别和种族是真实代码中的参数。

最佳答案

要捕获任何值,您只需不将该参数添加到查询中并且不将条件添加到 sql。

像这样的东西应该可以工作:

String sql = "SELECT * FROM dogs";

if ( age != "*" || gender != "*" || race != "*" )
  sql += " WHERE 1=1";

if ( age != "*" ) sql += " AND age = @age";
if ( gender != "*" ) sql += " AND gender = @gender";
if ( race != "*" ) sql += " AND race = @race";

MySqlCommand tempCommand = _DbHandler.CreateCommand(sql);

if ( age != "*" ) tempCommand.Parameters.AddWithValue("@age", age);
if ( gender != "*" ) tempCommand.Parameters.AddWithValue("@gender", gender);
if ( race != "*" ) tempCommand.Parameters.AddWithValue("@race", race);

关于c# - 从列 = 任何值的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453659/

相关文章:

c# - 什么时候应该使用 Moq 的 .As 方法?

c# - 检测不可用的池化 SqlConnections

c# - .GetHashCode() 是否应该为内存中具有不同引用的两个对象返回相同的值?

c# - 基于快速和脏反射的 XML 序列化程序

mysql - 有没有办法按照在子句中输入的顺序显示 INNER JOIN 条目?

mysql - 在 Perl DBI 模块中,指定任务的两种方法中哪一种在性能方面更好?

c# - 将 Firebird Net 提供商集成到应用程序中

c# - 是否有必要处置 SqlConnection 以及 SqlCommand?

c# - 选择单元格时,如何突出显示 DataGrid 列标题和行标题?

mysql - 缓慢的 mysql 更新与总和