Re: Пространство имён Rsdn.Framework.Data
От: Павел Бондарчук  
Дата: 10.10.03 00:32
Оценка: 44 (2)
Здравствуйте, Игорь Ткачёв, Вы писали:

ИТ>Статья:



ИТ>Авторы:

ИТ> Игорь Ткачёв

ИТ>Аннотация:

ИТ>В статье подробно рассматривается состав и способы применения пространства имён Rsdn.Framework.Data, представляющего собой высокоуровневую обёртку над ADO.NET.


У меня есть вопрос. К примеру, я хочу исполнить процедуру sp_help, или группу запросов, которая вернёт несколько результатов, и получить списки объектов, связанные с этими результатами. В данный момент, методы ExecuteList и ExecuteSpList делают только один "проход" и не вызывают IDataReader.NextResult.
Может стоит добавить в DbManager метод типа ArrayList GetObjectList(IDataReader reader, Type type).
В таком случае, можно было бы написать так:


IDataReader reader = db.ExecuteSpReader("sp_help", "MyTable");
ArrayList tables  = db.GetObjectList(reader, typeof(MyTableInfoClass));
ArrayList columns = db.GetObjectList(reader, typeof(MyColumnInfoClass));
reader.NextResult();  // we are skipping this result set because we want go to index information
reader.NextResult();  // we are skipping this result set because we want go to index information
reader.NextResult();  // we are skipping this result set because we want go to index information
reader.NextResult();  // we are skipping this result set because we want go to index information
ArrayList indexes = db.GetObjectList(reader, typeof(MyIndexInfoClass));


и т.д.

Другой вариант — добавить аргумент Type[] types в методы ExecuteList и ExecuteSpList.
Тогда бы мы имели следующее:



// null type means that we will skip next result set.
Type[] types = new Type[3] {typeof(MyTableInfoClass), typeof(MyColumnInfoClass), null, null, null, typeof(MyIndexInfoClass)}
ArrayList objects = db.ExecuteSpList(types, "sp_help", "MyTable"); // returns ArrayList of ArrayLists
MyTableInfoClass table = (ArrayList[0] as ArrayList)[0];
table.Columns = (ArrayList[1] as ArrayList);
table.Indexes = (ArrayList[5] as ArrayList);


etc.

Как вам такая идея?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.