нужна помощь по рефлексии
От: Аноним  
Дата: 03.03.05 18:47
Оценка:
Есть stored procedure и есть xml содержащий параметры для процедуры с узлами называющимися как параметры процедуры.
Необходимо каким-то образом узнать параметрв процедуры и создать массив SqlParameter и заполнить его данными.
Дело в том что параметров много и вручную очень утомительно их создавать для каждой процедуры

Помогите пожалуста
Re: нужна помощь по рефлексии
От: TK Лес кывт.рф
Дата: 03.03.05 19:43
Оценка:
Hello,
> Есть stored procedure и есть xml содержащий параметры для процедуры с узлами называющимися как параметры процедуры.
> Необходимо каким-то образом узнать параметрв процедуры и создать массив SqlParameter и заполнить его данными.
> Дело в том что параметров много и вручную очень утомительно их создавать для каждой процедуры
>
>
Посмотри DataAccess Application Block и его класс SqlHelperParameterCache
Posted via RSDN NNTP Server 2.0 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: нужна помощь по рефлексии
От: MaximVK Россия  
Дата: 03.03.05 19:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть stored procedure и есть xml содержащий параметры для процедуры с узлами называющимися как параметры процедуры.

А>Необходимо каким-то образом узнать параметрв процедуры и создать массив SqlParameter и заполнить его данными.
А>Дело в том что параметров много и вручную очень утомительно их создавать для каждой процедуры

А>Помогите пожалуста


Если у тебя SQL Server, то процедура sp_sproc_columns вернет информацию о твоей хранимой процедуре, в том числе и информацию о параметрах. Ну а дальше — дело техники. Самый простой вариант — закешировать массив параметров, посложнее — генерить классы-обертки.
Re[2]: нужна помощь по рефлексии
От: Аноним  
Дата: 04.03.05 11:09
Оценка: 16 (1)
Здравствуйте, TK, Вы писали:

TK>Hello,

>> Есть stored procedure и есть xml содержащий параметры для процедуры с узлами называющимися как параметры процедуры.
>> Необходимо каким-то образом узнать параметрв процедуры и создать массив SqlParameter и заполнить его данными.
>> Дело в том что параметров много и вручную очень утомительно их создавать для каждой процедуры
>>
>>
TK>Посмотри DataAccess Application Block и его класс SqlHelperParameterCache

Спасибо за наводку — вот результат:


  public static XmlDocument CreateObj(XmlDocument doc)
  {
    SqlParameter[] arParams1 = SqlHelperParameterCache.GetSpParameterSet(ConfigurationSettings.AppSettings["ConnectionString"], "Obj_Insert", true);
    for (int i = 0; i < arParams1.Length; i++)
    {
      if (doc.DocumentElement[arParams1[i].ParameterName.Remove(0, 1)] != null)
        arParams1[i].Value = doc.DocumentElement[arParams1[i].ParameterName.Remove(0, 1)].InnerText;
    }
    for (int i = 0; i < arParams1.Length; i++)
    {
      if (arParams1[i].ParameterName == "@UserID") arParams1[i].Value = new Guid(HttpContext.Current.User.Identity.Name);
    }

    XmlDocument doc1 = new XmlDocument();
    DataSet ds;
    ds = SqlHelper.ExecuteDataset(ConfigurationSettings.AppSettings["ConnectionString"], CommandType.StoredProcedure, "travelAgent_Policy_Insert", arParams1);
    doc1.LoadXml(ds.GetXml());
    return doc1;
  }




Во входящем документе содержаться узлы с названиями параметров (без @). В цикле проверяется содержится ли во входящем документе узел с названием параметра — и если такой обнаруживается — присваиваем ему значение
Во втором цикле проходимся по параметрам и ищем параметр с необходимым именен чтоб выполнить какую-нибудь спец операцию
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.