Вы использовали конкатенацию строк, которая переводит объект в формат JSON. Вместо этого используйте
console.log('Result:', myresult);
.
РЕДАКТИРОВАТЬ: Я только что попробовал это в консоли JavaScript Firefox:
>> const myresult = [];
undefined
>> const newobject = {'myname': 1};
undefined
>> console.log('NEWOBJECT:', newobject);
NEWOBJECT: Object { myname: 1 }
debugger eval code:1:1
undefined
>> myresult.push(newobject);
1
>> console.log('MYRESULT:', myresult);
MYRESULT: Array [ {…} ]
debugger eval code:1:1
undefined
т.е. регистрация объекта работает нормально.
Всегда помещайте свои данные в классы, определенные для определенного использования. Не раздавайте DataSets или DataReaders.
Если Ваш сохраненный proc возвращает несколько наборов, используйте DataReader. NextResult для усовершенствования к следующему блоку данных. Таким образом, можно получить все данные, загрузить их в объекты и закрыть средство чтения как можно скорее. Это будет самым быстрым методом для получения данных.
Если бы Вы не интересуетесь обновлением или удалением записей, Вы выбрали от базы данных, я предложил бы использовать DataReader. В основном DataSet внутренне использует несколько Datareaders, таким образом, DataReader должен дать Вам хорошее преимущество производительности.
Отобразите DataReader на промежуточные объекты и затем свяжите Ваши средства управления с помощью тех объектов. Может быть нормально использовать DataSets при определенных обстоятельствах, но это немногочисленно, когда у Вас есть веские причины "просто получения данных". Независимо от того, что Вы делаете, не передавайте DataReader своим средствам управления для закрытия ряд (не, что Вы сказали рассмотрение этого).
Мое персональное предпочтение состояло бы в том, чтобы использовать ORM, но если Вы собираетесь вручить списку свой доступ к данным, любой ценой я думаю, что необходимо предпочесть отображать DataReaders на объекты по использованию DataSets. Используя.NextResult, поскольку способом ограничить себя от удара базы данных многократно является обоюдоострый меч однако, так выберите мудро. Вы повторитесь, при попытке создать procs, которые всегда захватывают точно, что Вам нужно использование только одного вызова к базе данных. Если Ваше приложение является только несколькими страницами, оно, вероятно, в порядке, но вещи могут выйти из-под контроля быстро. Лично я имел бы один proc на тип объекта и затем поразил бы базу данных многократно (однажды для каждого типа объекта) для максимизации пригодности для обслуживания. Это - то, где ORM сияет, потому что хороший генерирует Sql, который получит Вас точно, что Вы хотите с одним вызовом в большинстве случаев.
Почти в каждой ситуации DataReader
s являются лучшим решением для чтения из базы данных. DataReader
s быстрее и требуют меньшей памяти, чем DataTable
s или DataSet
s.
Кроме того, DataSet
s может часто приводить к ситуациям, в которых повреждается модель OO. Это не очень объектно-ориентировано для раздавания реляционных данных/схем вместо объектов, которые знают, как управлять теми данными.
Так, для расширяемости, масштабируемости, модульный принцип и причины производительности, всегда используют DataReader
s, если Вы считаете себя Реальным Programmer™ ;)
Проверьте ссылки на факты и дискуссию о двух на практике и теории.
Я перешел к методу, который использует DataReaders для всех вызовов, я заметил отмеченную производительность impovement, особенно в случаях, когда я загружаю выпадающие списки и другие простые объекты как этот.
Лично с несколькими холмами отбрасывания, я обычно перехожу к получению по запросу отдельных блоков данных, чтобы получить его, вместо того, чтобы сказать хранимую процедуру, которая возвращает 5 наборов результатов.
Смотрите в TableAdapters, которые доступны с.NET 2.0 и. То, что они делают, дают Вам силу DataTable со строгим контролем типов и позволяют Вам отображать Метод заполнения для него, который будет использовать DataReader для загрузки его. Ваш метод заполнения может быть существующими хранимыми процедурами, Вашим собственным AdHoc SQL, или даже позволить мастеру генерировать AdHod или Хранимую процедуру для Вас.
Можно найти это путем запуска нового объекта XSD DataSet в рамках проекта. Для таблиц, которые используются для больше, чем просто поиска, можно также отобразиться, вставляют/обновляют/удаляют методы в TableAdapter.
Тогда я думаю, что лучше использовать DataReader.
else
Тогда я думаю, что лучше использовать DataSet.
Надеюсь, что я прав.
Независимо от того, выбираете ли вы один набор результатов или несколько наборов результатов, похоже, что консенсус заключается в использовании DataReader вместо DataSet.
Что касается того, должны ли вы когда-либо возиться с несколькими наборами результатов, мудрость такова, что вы не должны, но я могу представить себе разумный класс исключений из этого правила: (тесно) связанные наборы результатов. Вы, конечно, не хотите добавлять запрос для возврата того же набора вариантов для раскрывающегося списка, который повторяется на сотнях или даже десятках страниц в вашем приложении, но несколько узко используемых наборов могут быть разумно объединены. В качестве примера я сейчас создаю страницу для отображения нескольких наборов «несоответствий» для пакета данных ETL. Ни один из этих запросов, скорее всего, не будет использоваться где-либо еще, поэтому было бы удобно инкапсулировать их как один sproc «получить несоответствия».С другой стороны, лучшая производительность при этом может быть незначительной по сравнению с обходом естественной архитектуры одного набора результатов вашего ORM или кода доступа к данным вручную.