powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Подключение к базе данных при нестабильном интернете.
24 сообщений из 24, страница 1 из 1
Подключение к базе данных при нестабильном интернете.
    #40032526
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте! У меня приложение на Windows Forms.Я подключаюсь к базе данных с использованием Entity Framework. Периодически то выключается то включается интернет . При выключении приложение зависает. Нужно что бы все данные из базы данных скачивались сразу при первом подключении и формы работали нормально при разрыве соединения, а при восстановлении соединения происходила синхронизация. Пользователя пока всего три. Как достичь такого результата? Благодарю.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032547
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть каждый пользователь работает с локальной копией БД? Один удалил внешний ключ, другой добавил запись с этим внешним ключом, а потом всё должно волшебным образом синхронизироваться?
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032571
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
То есть каждый пользователь работает с локальной копией БД? Один удалил внешний ключ, другой добавил запись с этим внешним ключом, а потом всё должно волшебным образом синхронизироваться?

Я думал может есть вариант с приоритетом пользователей по времени изменения. Если нет, то нужно что бы форма работала только для чтения. Возможно так?
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032585
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так тебе EF не поможет, тебе нужно саму архитектуру базы прежде всего адаптировать. К примеру, все ID не должны быть автоинкрементными, а, например, GUID-ами
jeanssp
Я думал может есть вариант с приоритетом пользователей по времени изменения.
это никак не отвечает на мой вопрос про внешний ключ.
jeanssp
Если нет, то нужно что бы форма работала только для чтения.
Причем тут форма? EF - это про БД, а не про формы. Форму как напишешь, так и будет.

В общем, если ты считаешь, что есть волшебная пилюля для существующей БД - нет, ее нет. Работа с отвязанной БД должна быть продумана на уровне ТЗ и архитектуры, потом спроектирована, а потом реализована.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032592
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Может как нибудь выкачивать бд, сохранять ее в XML на локальном компьютере , и менять подключение то к одной то к другой бд?
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032603
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос не в том, как работать с локальной копией, а в том, что ты будешь делать при слиянии изменений нескольких пользователей
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032619
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Пользователи не будут ничего менять. Но должны иметь возможность просматривать данные. Ничего страшного если данные не совсем свежие.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032624
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Пользователи не будут ничего менять
тогда зачем им БД локально? Скачивай и кешируй для них готовые отчеты.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032633
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Это система учета для розничного магазина. Я еще к ней интернет магазин пристраиваю на blazor.(почти готов, спасибо Вам) Там сидят продавцы в отделе(2 отдела) и им надо посмотреть товар на остатках по артикулу, найти клиента по номеру телефона с его заказами. Интернет конечно можно сделать стабильный , но это получится 10000 в год. А так он у меня бесплатный. Если не решу вопрос с локальной бд, придется интернет налаживать.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032635
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну если это готовое, а не пишущееся изделие, но надо смотреть конкретику, информации слишком мало
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032642
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Я его только написал. Сейчас внедряю. БД заполнил уже реальными данными. Вот код формы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace point4
{
    public partial class Frm_stock : Form
    {
        public Frm_stock()
        {
            InitializeComponent();
        }
        private void Frm_stock_Load(object sender, EventArgs e)
        {
            using (point4Entities3 db = new point4Entities3())
            {
                cbo_articul.DataSource = db.articuls.ToList();
                cbo_articul.DisplayMember = "articul";
                cbo_articul.ValueMember = "articul_id";
            }
            
        }
        private void Populate_dgv_stock()
        {
            using(point4Entities3 db = new point4Entities3())
            {
                var f_data = db.view_goods_stocks.ToList()
                     .Where(x => x.articul.Equals(cbo_articul.Text));
                dgv_stock.DataSource = f_data.ToList();
            }
        }
        private void Populate_dgv_stock_ImageCount()
        {
            using (point4Entities3 db = new point4Entities3())
            {
                var f_data = db.sp_Dgv().ToList()
                    .Where(x => x.articul.Equals(cbo_articul.Text));
                dgv_stock.DataSource = f_data.ToList();
            }
        }
        private void btn_search_equals_Click(object sender, EventArgs e)
        {
            Populate_dgv_stock();
        }
        private void btnImageCount_Click(object sender, EventArgs e)
        {
            Populate_dgv_stock_ImageCount();
        }

        private void btnImage_Click(object sender, EventArgs e)
        {

        }

        private void btnDownloadImages_Click(object sender, EventArgs e)
        {
            int nomId = (int)dgv_stock.CurrentRow.Cells["nomencl_id"].Value;
            string articul = dgv_stock.CurrentRow.Cells["articul"].Value.ToString();
            string widht = dgv_stock.CurrentRow.Cells["widht"].Value.ToString();
            string lenght_id = dgv_stock.CurrentRow.Cells["lenght_id"].Value.ToString();

            FrmEditImages frmImages = new FrmEditImages();
            frmImages.Filename = articul + widht + lenght_id;
            frmImages.NomID = nomId;
            
            frmImages.ShowDialog();
        }

        private void cbo_articul_SelectedIndexChanged(object sender, EventArgs e)
        {
            Populate_dgv_stock_ImageCount();
        }

        private void btnDownloadImagesArt_Click(object sender, EventArgs e)
        {
            FrmArticulImages frmArticulImages = new FrmArticulImages();
            frmArticulImages.Filename = cbo_articul.Text;
            frmArticulImages.ArtID = (int)cbo_articul.SelectedValue;
            frmArticulImages.ShowDialog();
        }
    }
}
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032663
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучай тему Репликация БД . Если у тебя клиенты только читают БД, то обновление копии вполне просто можно организовать встроенными средствами MS SQL. В твоей проге ничего менять не надо.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032695
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Shocker.Pro,
Я его только написал. Сейчас внедряю. БД заполнил уже реальными данными. Вот код формы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace point4
{
    public partial class Frm_stock : Form
    {
        public Frm_stock()
        {
            InitializeComponent();
        }
        private void Frm_stock_Load(object sender, EventArgs e)
        {
            using (point4Entities3 db = new point4Entities3())
            {
                cbo_articul.DataSource = db.articuls.ToList();
                cbo_articul.DisplayMember = "articul";
                cbo_articul.ValueMember = "articul_id";
            }
            
        }
        private void Populate_dgv_stock()
        {
            using(point4Entities3 db = new point4Entities3())
            {
                var f_data = db.view_goods_stocks.ToList()
                     .Where(x => x.articul.Equals(cbo_articul.Text));
                dgv_stock.DataSource = f_data.ToList();
            }
        }
        private void Populate_dgv_stock_ImageCount()
        {
            using (point4Entities3 db = new point4Entities3())
            {
                var f_data = db.sp_Dgv().ToList()
                    .Where(x => x.articul.Equals(cbo_articul.Text));
                dgv_stock.DataSource = f_data.ToList();
            }
        }
        private void btn_search_equals_Click(object sender, EventArgs e)
        {
            Populate_dgv_stock();
        }
        private void btnImageCount_Click(object sender, EventArgs e)
        {
            Populate_dgv_stock_ImageCount();
        }

        private void btnImage_Click(object sender, EventArgs e)
        {

        }

        private void btnDownloadImages_Click(object sender, EventArgs e)
        {
            int nomId = (int)dgv_stock.CurrentRow.Cells["nomencl_id"].Value;
            string articul = dgv_stock.CurrentRow.Cells["articul"].Value.ToString();
            string widht = dgv_stock.CurrentRow.Cells["widht"].Value.ToString();
            string lenght_id = dgv_stock.CurrentRow.Cells["lenght_id"].Value.ToString();

            FrmEditImages frmImages = new FrmEditImages();
            frmImages.Filename = articul + widht + lenght_id;
            frmImages.NomID = nomId;
            
            frmImages.ShowDialog();
        }

        private void cbo_articul_SelectedIndexChanged(object sender, EventArgs e)
        {
            Populate_dgv_stock_ImageCount();
        }

        private void btnDownloadImagesArt_Click(object sender, EventArgs e)
        {
            FrmArticulImages frmArticulImages = new FrmArticulImages();
            frmArticulImages.Filename = cbo_articul.Text;
            frmArticulImages.ArtID = (int)cbo_articul.SelectedValue;
            frmArticulImages.ShowDialog();
        }
    }
}





Вот как написал, так и работает.
Почитайте что-ли про SOLID, гексагональную архитектуру, Microsoft Application Architecture...

Ну или если хотите готовенькое, то выкидывайте Entity Framework и берите старый добрый DataSet, он как раз для работы в отсоединённом режиме придуман был.
В этом, кстати, в каждой книжке по ADO.NET, что я в руках держал, написано.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032698
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Я подключаюсь к базе данных с использованием Entity Framework. Периодически то выключается то включается интернет .

База данных торчит в интернет - это пять! Безопасность на уровне.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032778
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
База данных торчит в интернет - это пять! Безопасность на уровне.
Давай надеяться, что либо VPN либо RDP ))
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032814
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, Что я делаю неправильно, поясните, пожалуйста
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032819
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>jeanssp, вчера, 10:51 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1332189&msg=22256940][22256940]
>... Нужно что бы все данные из базы данных скачивались сразу...
<
Периодически, каждый раз с построением нового соединения, качивай данные в кеш.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032829
RMT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMT
Гость
Я бы сказал, что тут две проблемы:
1) Классическая проблема конкурентного доступа. Решения два: пессимистичный (блокировка записи до сохранения сущности), оптимистичный (фетч более свежей копии данных, основываясь на дифф row_version);
2) Отсутствие алгоритма поллинга данных.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032945
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я еще думаю попробовать выполнять операцию извлечения данных из БД в асинхронном режиме.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public  async Task Populate_dgv_stock()
        {
            using(point4Entities3 db = new point4Entities3())
            {
                var f_data = await db.view_goods_stocks.ToListAsync()
                     .Where(x => x.articul.Equals(cbo_articul.Text));
                dgv_stock.DataSource = f_data.ToListAsync();
               
            }
        }


Этот код выдает ошибку. Как исправить?
И еще обернуть это в try catch может быть ?
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032960
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
ошибку
А откуда у f_data возьмется метод ToListAsync?
Нафига ты вообще материализуешь всю коллекцию до выполнения фильтрации?
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032962
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 public async Task Populate_dgv_stock()
        {
            using (point4Entities3 db = new point4Entities3())
            {
                var f_data = await db.view_goods_stocks
                     .Where(x => x.articul.Equals(cbo_articul.Text));
                dgv_stock.DataSource = f_data.ToList();

            }
        }



Все равно не пашет. Ну не понимаю я!
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032966
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, ну надо же в конце концов прочитать текст ошибки, тебе же компилятор четко говорит, в чем проблема. Или ты так и будешь куски кода сюда выкладывать? Что ты тут пытаешься ожидать с помощью await?
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032968
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда ты наводишь мышиный курсор на метод, студия показывает тебе, какой тип возвращается. Не используй var, если не можешь сходу сообразить, какого типа у тебя переменная, хотя студия это тоже подсказывает.

Ну про то, что учебник надо прочесть до того, как писать код, это я уже, кажется, тебе говорил.
...
Рейтинг: 0 / 0
Подключение к базе данных при нестабильном интернете.
    #40032972
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
При помощи await я хочу добиться что бы форма не зависала при кратковременном отключении интернета.
Код: c#
1.
 var f_data = await db.view_goods_stocks.Where(x => x.articul.Equals(cbo_articul.Text)).ToListAsync();


вот так ошибок нет, но когда кабель выдергиваю, при событии
Код: c#
1.
cbo_articul_SelectedIndexChanged(object sender, EventArgs e)


все зависает и вываливается ошибка (SqlException: Ошибка на транспортном уровне при получении результатов с сервера. (provider: Session Provider, error: 19 - Физическое подключение не используется)
)
Как бы ее обработать, что бы форма не зависала
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Подключение к базе данных при нестабильном интернете.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (11): Анонимы (8), Yandex Bot 1 мин., Bing Bot 3 мин., Google Bot 5 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]