Есть stored procedure и есть xml содержащий параметры для процедуры с узлами называющимися как параметры процедуры.
Необходимо каким-то образом узнать параметрв процедуры и создать массив SqlParameter и заполнить его данными.
Дело в том что параметров много и вручную очень утомительно их создавать для каждой процедуры
Помогите пожалуста
Hello,
> Есть stored procedure и есть xml содержащий параметры для процедуры с узлами называющимися как параметры процедуры.
> Необходимо каким-то образом узнать параметрв процедуры и создать массив SqlParameter и заполнить его данными.
> Дело в том что параметров много и вручную очень утомительно их создавать для каждой процедуры
>
>
Посмотри DataAccess Application Block и его класс SqlHelperParameterCache
Posted via RSDN NNTP Server 2.0 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, 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;
}
Во входящем документе содержаться узлы с названиями параметров (без @). В цикле проверяется содержится ли во входящем документе узел с названием параметра — и если такой обнаруживается — присваиваем ему значение
Во втором цикле проходимся по параметрам и ищем параметр с необходимым именен чтоб выполнить какую-нибудь спец операцию