Добрый день,
Наткнулся на такую проблемку:
При выполнении ХП с использованием 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() сравнивать имена параметров без учета префикса.
Что думаете?