Проблема с вызовом ХП в MySQL
От: MozgC США http://nightcoder.livejournal.com
Дата: 14.05.09 20:22
Оценка:
Добрый день,
Наткнулся на такую проблемку:
При выполнении ХП с использованием MySqlDataProvider получается косячок с установкой значений параметров. Дело в том что при использовании ХП сначала идет запрос к БД чтобы получить параметры ХП. Далее происходит такой цикл:

for (int i = 0; i < commandParameters.Length; i++)
{
    IDbDataParameter param = commandParameters[i];
    string           name  = param.ParameterName;
    bool             found = false;

    foreach (IDbDataParameter p in parameterValues)
    {
        if (string.Compare(name, p.ParameterName, true) == 0)
        {
        ...
}

Т.е. сравниваются имена параметров, полученных запросом из БД, с именами заданных параметров. Но дело в том, что в в MySQL параметры задаются префиксом "?", т.е. задаем мы их типа так db.Parameter("?Message", "blablabla"), но имена параметров полученных из MySqlCommandBuilder.DeriveParameters() начинаются с префикса "@". Поэтому при сравнении имен параметров считается что они разные и значения не задаются. В результате ХП вызывается со значением параметров — null.
Надеюсь, что объяснил более менее понятно.

Я могу чего-то не знать, но склоняюсь что это ошибка в MySqlCommandBuilder.DeriveParameters() — думаю что префикс должен использоваться "?", либо выбираться в зависимости от настроек заданных в connection string (вроде у mysql там есть параметр который отвечает за выбор префикса).

Поэтому видимо надо сообщать о баге в MySQL, либо может быть в DbManager.CreateSpParameters() сравнивать имена параметров без учета префикса.

Что думаете?
mysql parameter deriveparameters createspparameters
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.