none
Прочитать запись из таблицы в удаленной Базе данных RRS feed

  • Вопрос

  • Доброго дня!

    Подскажите, есть ли стандартные средства для чтения SQL таблиц данных с удаленного сервера. Если я правильно понял, то никакой поддержки EntityFramework (или других подобных средств для работы с бд) в Windows Store App не имеется.

    Задача более чем тривиальная, к примеру, подключиться к БД по ConnectionString и получить значение любой таблицы.

    Если это невозможно, то как это делается правильно на практике, вы дописываете модуль, который возвращает xml, а затем десериализируете его? Либо создаете Windows службу, которая работает с бд как положено и получаете данные через нее? Но пройдет ли такое приложение вместе со службой в магазин?

    В общем, подскажите, как правильно получать данные из удаленной бд, не хочется изобретать велосипед с квадратными колесами.

    10 декабря 2012 г. 20:08

Ответы

  • Обычно делается обвес из сервисов, которые отдают данные SQL сервера.

    Если вам нужно устанавливать базу вместе с приложением, то используйте sqlite for WinRt

    • Помечено в качестве ответа Abolmasov Dmitry 17 декабря 2012 г. 12:31
    11 декабря 2012 г. 5:20
  • Если удаленная на хостинге или в Azure (как у меня). То через WCF сервисы лучше чем прямым подключением. Раньше я также хотел через прямое, но переубедили. А вот сделать локальную базу SQLLite для кеширования данных, чтобы не постоянно тянуть через инет, а только те которые меняются в удалённой базе - вот это сейчас изучаю. :)

    Спасибо

    • Помечено в качестве ответа Abolmasov Dmitry 17 декабря 2012 г. 12:31
    11 декабря 2012 г. 5:33

Все ответы

  • Обычно делается обвес из сервисов, которые отдают данные SQL сервера.

    Если вам нужно устанавливать базу вместе с приложением, то используйте sqlite for WinRt

    • Помечено в качестве ответа Abolmasov Dmitry 17 декабря 2012 г. 12:31
    11 декабря 2012 г. 5:20
  • Если удаленная на хостинге или в Azure (как у меня). То через WCF сервисы лучше чем прямым подключением. Раньше я также хотел через прямое, но переубедили. А вот сделать локальную базу SQLLite для кеширования данных, чтобы не постоянно тянуть через инет, а только те которые меняются в удалённой базе - вот это сейчас изучаю. :)

    Спасибо

    • Помечено в качестве ответа Abolmasov Dmitry 17 декабря 2012 г. 12:31
    11 декабря 2012 г. 5:33
  • Получается в итоге:

    1) Необходимо развернуть WCF на серваке (Metro не воспринемает localhost для тестирования?)

    2) Получать данные в Metro приложении и уже в нем использовать необходимую абстракцию.

    А WCF сервис способен менять данные в бд, т.е. не только производить чтение данных. Если кто уже пробовал, как оно по скорости на оычном хостере, например parking.ru или после первой 100 заросов сайт сляжет вместе с приложением? (Это я о вопросе использования без кэширования в SQLite базу)

    11 декабря 2012 г. 11:08
  • 1) По - моему есть, Хотя я не спец. Но для Azure есть точно локальный эмулятор.

    2) Да наверное. Хотя сам сервис у меня даже на стороне сервера производит небольшие вычисления. (Но это скорее неправильно, т.к. расходуется платный ресурс, да и локальный комп быстрее обработает те же операции) так что скоро вообще переделаю сервис только на выборку данных из базы, или на запись данных в базу. А все вычисления и преобразования локально.

    3) Вчера как раз сделал в том же самом сервисе один из [Operation Contract] на запись данных в базу. пишет всё прекрасно. Но этот сервис работает с моделью базы edmx. А вот сейчас хочу посмотреть вариант, чтобы на стороне сервера сделать сервис который бы обращался не к модели а к хранимым процедурам.

    Как то до Azure был у меня хостинг infobox дак там работал сервис (немного другой) примерно 80мс. Хотя хостинг вроде Питерский  а обращались мы к нему из Екатеринбурга и Днепропетровска. Что оттуда что оттуда был доступ 80мс.

    Но в моём хостинге самом слабом по финансам тогда было ограничение на 50 одновременных подключений. Так что у меня ничего не падало. :) Как бы работало на большом количестве подключений не проверял.


    Спасибо

    11 декабря 2012 г. 13:03
  • Спасибо огромное за информацию. 

    Пока вы далеко не ушли :), хочу узнать как у знатоков этой темы, возможно ли кинуть папку с WCF сервисом рядом с корневым сайтом мимо главного web.config и уже оттуда использовать его отдельно. 

    Например, сайт со всеми потрохами лежит на mysite.com, а сервис на mysite.com/service причем использует неймспэйсы из AppCode главного сайта.

    11 декабря 2012 г. 16:35
  • Привет.

    А на чем у вас пишется сайт, который хоститься на mysite.com?

    WCF будет компилироваться как отдельное веб приложение и не должен быть связан с тем откуда импортируются типы и остальное.


    Для связи [mail]

    13 декабря 2012 г. 11:35
  • Сайт на ASP .NET. Только что попробовал: создал сервис в отдельной папке, подключил namespace для работы с базой данных Entity, в методе сервиса вернул List<DatabaseModel.Products> (на 400 объектов, а то зависнет надолго).

    Затем создал новый проект Windws Store, присоединил сервис, написал вот такой код и все вроде заработало:

            public async void ShowMessageDialog(string Title, string Message)
            {
                Windows.UI.Popups.MessageDialog dlg = new MessageDialog(Message, Title);
                await dlg.ShowAsync();
            }
    
            public void GetData()
            {
                try
                {
                    ServiceReference1.ServiceTestClient client = new ServiceReference1.ServiceTestClient();
                    var Data = client.GetProductsAsync().Result;
                    //List<ServiceReference1.Products> SList = Data.ToList<ServiceReference1.Products>();
                    ObservableCollection<ServiceReference1.Products> ProductsOsv = new ObservableCollection<ServiceReference1.Products>();
                    ProductsOsv = Data;
                    gvMain.ItemsSource = ProductsOsv;
                    
                }
                catch (Exception ex)
                {
                    ShowMessageDialog("Some errors there...", ex.Message);
                }
                
            }

    Только пока незнаю как в метро организовывается paging, т.е. разбивка и просмотр по страницам определенного размера. 


    • Изменено Kutcher 13 декабря 2012 г. 13:06
    13 декабря 2012 г. 13:06
  • Посмотрите как тут делается http://habrahabr.ru/company/microsoft/blog/145178/

    15 декабря 2012 г. 6:53
  • Спасибо, SlotDB, очень полезная статья. 

    15 декабря 2012 г. 17:15
  • Если вам нужно устанавливать базу вместе с приложением, то используйте sqlite for WinRt


    А SQL Server Compact нельзя применить?
    9 января 2013 г. 7:23
  • Привет. Версии SQL Server Compact (CE) для WinRT нет.


    Для связи [mail]

    9 января 2013 г. 8:31
  • Привет. Версии SQL Server Compact (CE) для WinRT нет.


    Да что ж такое! Microsoft в своём стиле! У меня есть приложение для Windows Phone, которое использует SQL Server Compact. Хотел перенести его на WinRT. Получается, что нельзя! Что за подход такой....
    9 января 2013 г. 13:59
  • Андрей, xml сериализация может вам помочь, в зависимости от содержимого и объема базы данных.

    9 января 2013 г. 17:30
  • Андрей, xml сериализация может вам помочь, в зависимости от содержимого и объема базы данных.


    Я изначально захотел сделать БД именно как БД, чтобы были составные индексы, ссылочная целостность, и т.д. Выбирал между SQL Compact и SQLite. Зря я не SQLite выбрал. Теперь же у меня всё заточено под SQL CE, например, обновление схемы базы данных. В SQLite такого же нет? И движка нормального SQLite  для WP7 нет? Нормальный только для WP8, правильно?
    30 апреля 2013 г. 5:58