【发布时间】:2016-06-30 17:55:38
【问题描述】:
有没有办法在创建实际对象之前为MySQLCommand 对象创建参数?
目前我必须像这样设置生成的命令:
public static MySqlCommand User(MySqlConnection MySQL, User u)
{
var cmdVars = new List<string>();
const string cmd = "SELECT * FROM `schema`.`table` WHERE 1=1 AND ";
if (u.ID != null) cmdVars.Add("`ID` LIKE @0");
if (u.Username != null) cmdVars.Add("`Username` LIKE @1");
if (u.First != null) cmdVars.Add("`FirstName` LIKE @2");
if (u.Last != null) cmdVars.Add("`LastName` LIKE @3");
if (u.Phone != null) cmdVars.Add("`Phone` LIKE @4");
if (u.Extension != null) cmdVars.Add("`Extension` LIKE @5");
if (u.Email != null) cmdVars.Add("`Email` LIKE @6");
var MySqlCmd = new MySqlCommand(cmd + string.Join(" AND ", cmdVars), MySQL);
if (u.ID != null) MySqlCmd.Parameters.AddWithValue("@0", u.ID);
if (u.Username != null) MySqlCmd.Parameters.AddWithValue("@1", u.Username);
if (u.First != null) MySqlCmd.Parameters.AddWithValue("@2", u.First);
if (u.Last != null) MySqlCmd.Parameters.AddWithValue("@3", u.Last);
if (u.Phone != null) MySqlCmd.Parameters.AddWithValue("@4", u.Phone);
if (u.Extension != null) MySqlCmd.Parameters.AddWithValue("@5", u.Extension);
if (u.Email != null) MySqlCmd.Parameters.AddWithValue("@6", u.Email);
return MySqlCmd;
}
虽然效果很好,但随着更多参数的添加,它看起来很粗糙,并且需要用户创建一个新的用户对象来搜索一个值。
我考虑切换到in this question 所示的方法,但在与 MySQLConnector 一起使用时,管理值变得过于复杂,并且对于提高可读性没有任何作用。
【问题讨论】: