Есть проблема следующего свойства. Когда мы выполняем команду
return DBManager.SetSpCommand("MANAGE_ACTIVITIES_PKG.READ_ACTIV_TAB",
DBManager.Parameter("P_act_TYPE", (int)actType)....
то в DBManager создаётся параметр с именем "P_act_TYPE". А при Derive Parameters получаем из базы этот же параметр, но с именем "P_ACT_TYPE". Когда поисходит поиск параметров и сравнение их имён получается, что параметр "P_act_TYPE" неравен параметру "P_ACT_TYPE" и естественно происходит ошибка. Может в таком случае стоит добавить в провайдер параметр, который указывал бы производить сравнение с учётом регистра или без? Или не в провайдер...
Здравствуйте, <Аноним>, Вы писали:
А>то в DBManager создаётся параметр с именем "P_act_TYPE". А при Derive Parameters получаем из базы этот же параметр, но с именем "P_ACT_TYPE". Когда поисходит поиск параметров и сравнение их имён получается, что параметр "P_act_TYPE" неравен параметру "P_ACT_TYPE" и естественно происходит ошибка. Может в таком случае стоит добавить в провайдер параметр, который указывал бы производить сравнение с учётом регистра или без? Или не в провайдер...
Там делается прямой вызов ADO.NET метода, так что...
... << RSDN@Home 1.2.0 alpha rev. 0>>
Здравствуйте, IT, Вы писали:
IT>Там делается прямой вызов ADO.NET метода, так что...
наверно я всё-таки не правильно описал ситуацию
есть метод
private IDbDataParameter[] CreateSpParameters(string spName, object[] parameterValues)
в нём получаем список параметров хранимой процедуры
commandParameters = GetSpParameterSet(spName, true);
затем последовательно сравниваем имена параметров, которые были получены из ХП и имена параметров, которые находятся в массиве parameterValues (эти параметры мы создали при вызове, например, DBManager.SetSpCommand(...))
if (name == p.ParameterName)
{
param.Value = p.Value;
found = true;
break;
}
так вот, если в SetSpCommand мы создали параметр с именем "param1", а из ХП получили параметр "PARAM1", то переменная found после выполнения предыдущего куска кода будет равна false и выполнится следующий код
if (found == false && (
param.Direction == ParameterDirection.Input ||
param.Direction == ParameterDirection.InputOutput))
{
param.SourceColumn = name[0] == '@'? name.Substring(1): name;
}
но param.Value останется пустым и при выполнении запроса в базу будет отправлен null в качестве значения параметра "PARAM1", хотя парамерт "param1" был нами проинициализирован.
Вот я и имел ввиду, что при сравнении
name == p.ParameterName
может можно было бы придумать механизм, что бы при определённых услосиях сравнение шло case insensitive?
Здравствуйте, <Аноним>, Вы писали:
IT>>>Там делается прямой вызов ADO.NET метода, так что...
А> так какой будет ответ на моё предыдущее письмо?
Ну как бы положительный

... << RSDN@Home 1.2.0 alpha rev. 0>>