Здравствуйте, Игорь Ткачёв, Вы писали:
ИТ>Статья:
ИТ>Авторы:
ИТ> Игорь Ткачёв
ИТ>Аннотация:
ИТ>В статье подробно рассматривается состав и способы применения пространства имён 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.
Как вам такая идея?