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...
Пока на собственное сообщение не было ответов, его можно удалить.