RUS  ENG 

Сохранение результатов метода NetworkObjects в массив

Страницы: 1
RSS
Сохранение результатов метода NetworkObjects в массив
 
Добрый день!
При использовании коллекции объектов сети, используя Layer.NetworkObjects есть возможность сохранить результат выборки в формат .dbf, применив метод SaveAsDBF. Хотелось бы узнать, есть ли какой-либо способ сохранить результат в массив, заранее созданный? Вариант перебора не совсем подходит, так как занимает продолжительное время.
Ситуация следующая: пользуемся C#, база MS SQL Server (перегнали с FoxPro), выполняется действие - выбор объектов на карте и привязка к ним некоторых атрибутов из базы. Делается так: коллекция объектов NetworkObjects сохраняем в .dbf (SaveAsDBF), делаем соединение и выполняем запрос к таблице. Результат помещаем в объект DataTable, который затем используется в запросе LINQ.

Если кодом, то примерно так:

HeatNet.get_NetworkObjects(eNetworkObjectFilter.eNetworkAll).SaveAsDBF("network.dbf");
DataTable dt = new DataTable();
OleDbConnection conn = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source= network.dbf");
OleDbDataAdapter da = new OleDbDataAdapter("select * from network", conn);
da.Fill(dt);

... и затем объект dt пользуется по назначению в различных запросах.
В случае, если была бы возможность сразу сохранить в массив, то отпала бы необходимость использовать dbf.
Или возможно есть другой подход к описанной ситуации?

Заранее спасибо!
 
Сделать можно. Уточните пожалуйста, какой именно массив создавать? SAFEARRAY из длинных целых?
 
Это было бы отлично!
Да, если есть возможность, то делать целочисленные типы полей в массиве, так как в основном все коллекции состоят из полей типа int.
После Вашей реализации надо будет скачать обновления библиотек?
 
Да. Добавим, сообщим.
 
Добавили методы NetworkObjects.SaveToArray(), NetworkTree.SaveToArray(), ElementKeys.SaveToArray

Первые два возвращают двумерный массив 8xN, а последний просто массив ключей

Код
Private Sub Command42_Click()

Dim nw As NetworkObjects

Set nw = MapCtrl1.Map.Layers.Active.NetworkObjects(eNetworkAll)

Dim v As Variant

v = nw.SaveToArray

If TypeName(v) = "Long()" Then

    For i = 0 To nw.Count - 1

        List1.AddItem str(v(i, 0)) + "," + str(v(i, 1)) + "," + str(v(i, 2)) + "," + str(v(i, 3)) + "," + str(v(i, 4)) + "," + str(v(i, 5)) + "," + str(v(i, 6)) + "," + str(v(i, 7))

    Next i

End If

End Sub
 
Увожаемый Grom, подскожити пожалуста, у нас, таже проблема, и нозрел вопрос, как можно быстро заполнить datatable из полученого масива?
Заранее спасибо!
Страницы: 1