在C#中自动神奇地添加MySQL参数

时间:2011-02-03 12:02:13

标签: c# .net mysql regex dictionary

目前,我正在使用参数为每个mysql查询创建一个新方法。 一个例子:

public DataTable RetreiveAllLinks(int id, int categoryid)
{
    const string request =
    @"
        SELECT * 
        FROM links
        WHERE id=?id,categoryid=?categoryid
        ORDER by id DESC
    ";
    using (var query = new MySqlCommand(request))
    {
        query.Parameters.AddWithValue("?id", id);
        query.Parameters.AddWithValue("?categoryid", categoryid);
        return _connection.RetreiveData(query);
    }
}

这真的让我感到紧张,因为我总是会遇到10-30个查询,两个查询可以为我做这个,一个简单的方法来检索非参数查询,以及一个参数方法。例如

public DataTable NonParameterCommand(string r)
{
    var request = r;
    using (var query = new MySqlCommand(request))
    {
        return _connection.RetreiveData(query);
    }
}

我想做什么,是一些正则表达式,我会说,例如

var pPattern = "^[\\?][\\w]";

然后是一个带有请求和列表作为参数的方法,列表的顺序应与请求参数的顺序相同。所以,如果请求是

`"SELECT * FROM test WHERE id=?id,categoryid=?categoryid"` 

然后我的列表看起来像

var _dictionary = new Dictionary<string, string>();
_dictionary.Add(_parameter, _value);

和我的方法

ParameterCommand(string r, Dictionary dic)

但究竟是怎么回事?

1 个答案:

答案 0 :(得分:2)

如果您使用的是字典,那么密钥就已经是参数名称了。为什么解析查询以提取它们?

你可以这样做:

public DataTable CommandWithParams(string sql, Dictionary<string, object> parameters)
{
    using (var query = new MySqlCommand(sql))
    {
        foreach (var param in parameters)
        {
            query.Parameters.AddWithValue(param.Key, param.Value);
        }
        return _connection.RetreiveData(query);
    }
}

致电:

var parameters = new Dictionary<string, object>()
{
    { "?param1", value1 },
    { "?param2", value2 }
};

var result = CommandWithParams(query, parameters);

但也许你想使用List而不是Dictionary? (我不推荐它,根据它们的位置传递参数值会容易出错)