Автоматически добавлять параметры MySQL в C # - PullRequest
3 голосов
/ 03 февраля 2011

В настоящее время я создаю новый метод для каждого запроса 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 Ответ

2 голосов
/ 03 февраля 2011

Если вы используете словарь, то ключ уже будет именем параметра.Зачем анализировать запрос, чтобы извлечь их?

Вы можете сделать:

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);

Но, возможно, вы хотите использовать вместо этого списоксловаря?
(я бы не советовал, передача значений параметров на основе их положения будет подвержена ошибкам) ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...