Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / WinForms, .Net Framework |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 [3] 4 5 6 вперед Ctrl→ все |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Petro123, сегодня, 20:40 [21789371] >Ну, если тебе не доходит тема: "Ищу ОРМ"... Мне, и я вижу остальным, по барабану. <Если ты с придыханием... "Ищет ОРМ", то для меня - ищет прослойку с необходимым функционалом. Повторяю, вот здесь открой ссылку и посмотри раздел API Examples. У меня это всё реализовано для работы с ХП. Только мне не надо в клиентском приложении создавать постоянные таблицы, временные по нужде создаются в рамках ХП. Мне не надо писать на клиенте реализацию SELECT, INSERT, UPDATE, DELETE - это всё реализовано в ХП и только в одном экземпляре. Относительно остальных - каждому своё. Только не вижу примеров реализации функционала, подобного примеру и нет соответствующих цифирь. |
19 янв 19, 22:41 [21789428] Ответить | Цитировать Сообщить модератору |
Petro123 Member Откуда: Загрузочный сектор Москвы (AutoPOI.ru) Сообщений: 38643 |
ВМоисеев, Вам всем, таким вот пейсателям пенсионерам, не хватает мужества написать одну фразу: "Я весь функционал ОРМ реализовал самостоятельно". Но выжевархитектуреничегонепонимаете. Удачи! |
20 янв 19, 11:26 [21789540] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Топик называется "Ищу ORM для MSSQL поддержка ХП важна". У вас не ORM, у вас обёртка над ADO.NET под свои нужды. Такие каждый писал до появления готовых библиотек. Да и продолжают писать. Вы этим предлагаете заняться ТСу? Или что? |
||
20 янв 19, 11:36 [21789541] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 11:36 [21789541] >… Вы этим предлагаете заняться ТСу?... <Чем будет заниматься ТС - его личное дело. Я предлагаю альтернативный вариант. Осознанный выбор за ним, но он должен видеть альтернативные варианты. >Теперь по сути - … У вас не ORM, у вас обёртка над ADO.NET под свои нужды... <Дайте определение ORM, определите его базовый функционал. Или Вас коробит от такой записи SELECT: object[][] psp = new object[3][]; psp[0] = new object[2] { "x_nazvanie", xstr }; psp[1] = new object[2] { "x_dt_begin", (DateTime)dpr_Начало.SelectedDate }; psp[2] = new object[2] { "x_dt_end", (DateTime)dpr_Конец.SelectedDate }; при.tmrStart(); await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.VD_Inspek_Sel", wsp.sp_Sel, psp, RowToEntity)); при.tmrStop(); и записью выборки сущностей в List или ObservableCollection и предпочитаете такую: int agesAgo = DateTime.Today.AddYears(-20).Year; db.Select<Author>(x => x.Birthday >= new DateTime(agesAgo, 1, 1) && x.Birthday <= new DateTime(agesAgo, 12, 31)); >...Такие каждый писал до появления готовых библиотек… <Он может найти подходящую ORM, написать свою прослойку или взять мою и допилить до своих нужд. |
20 янв 19, 12:35 [21789571] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Общепринятое определение Вас устроит? Object-relational mapping (ORM) in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages. |
||
20 янв 19, 12:48 [21789579] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Меня не коробит от того, что кто-то SELECT-ы пишет в хранимых процедурах. Лично я тоже пишё SELECT-ы в хранимых процедурах. А вот как Вы оформили вызов хранимой процедуры, от этого да, немного коробит. |
||
20 янв 19, 12:50 [21789580] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Какую такую? И что значит предпочитаю? И как это связано с выбором ORM? |
||
20 янв 19, 12:53 [21789581] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
И как же ему взять Вашу прослойку и допилить под свои нужды? Человеку нужно готовое и простое. А не фиг знает что и допиливать. |
||
20 янв 19, 12:55 [21789582] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 12:55 [21789582] >...Человеку нужно готовое и простое. А не фиг знает что и допиливать… Я не только SELECT, но и INSERT, UPDATE и DELETE реализую в ХП. И тут появляются нюансы - они все могут вернуть сущность, а нужно ли это ТС? Обстоятельства могут поставить его в нужную позу и тем не менее - пример: ALTER PROCEDURE [dbo].[au_Группы_Ins] @pk_Entity uniqueidentifier AS BEGIN SET NOCOUNT OFF; INSERT INTO dbo.tbl_Группы(pk_Entity) VALUES(@pk_Entity); SELECT pk_Entity,str_Группа,ts_Entity FROM tbl_Группы WHERE (pk_Entity=@pk_Entity); END <Общепринятое определение Вас устроит? Устроит. Назови хоть горшком, а делает то он что, каков функционал? |
20 янв 19, 13:53 [21789616] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Читайте: https://en.wikipedia.org/wiki/Object-relational_mapping Информация открыта. |
||
20 янв 19, 14:01 [21789624] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Мы в курсе, Вы это уже писали и не раз.
Ещё раз задам вопрос: "И как же ему взять Вашу прослойку и допилить под свои нужды?" |
||||
20 янв 19, 14:02 [21789626] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 14:01 [21789624] >Читайте:... <Смотрите: //-- Сущность, что ассоциируется с выборкой из базы данных public class row_Entity { public row_Entity(bool _chb_Entity, Guid _pk_Entity, string _str_Группа, byte[] _ts_Entity) { this.chb_Entity = _chb_Entity; this.pk_Entity = _pk_Entity; this.str_Группа = _str_Группа; this.ts_Entity = _ts_Entity; } public row_Entity() { } public bool chb_Entity { get; set; } public Guid pk_Entity { get; set; } public string str_Группа { get; set; } public byte[] ts_Entity { get; set; } } . . . //-- Строку выборки отражаем на сущность private void RowToEntity(IDataRecord record) { xrow = new row_Entity() { chb_Entity = false, pk_Entity = (record.IsDBNull(0)) ? гп.gd_0 : (Guid)record.GetGuid(0), str_Группа = (record.IsDBNull(1)) ? "???" : ((string)record.GetString(1)).Trim(), ts_Entity = (record.IsDBNull(2)) ? null : (byte[])record.GetValue(2) }; lst_Entity?.Add(xrow); } |
20 янв 19, 14:39 [21789644] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Вы это не раз уже показывали, чего тут смотреть-то? Вы лучше на вопрос дайте уже ответ: "И как же ему взять Вашу прослойку и допилить под свои нужды?" |
||
20 янв 19, 14:45 [21789647] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 14:02 [21789626] >Ещё раз задам вопрос:... <Так это не секрет, я Вам уже показывал, повторяю: using System; using System.Data.SqlClient; using System.Data; namespace ns_Хранилище { public delegate void dlg_sp(dlg_RowToEntity RowToEntity); public delegate void dlg_RowToEntity(IDataRecord reader); public static class wsp { public static int nRow; static SqlDataReader reader; public static string wspErr; public static bool bMax; //-- Обработка строк выборки select public static void sp_Sel(dlg_RowToEntity RowToEntity) { try { while (reader.Read()) { nRow++; if (nRow == гп.max_Выборка) { bMax = true; break; } //-- Это максимум что можем отобразить, надо уточнять запрос RowToEntity(reader); } } catch (System.InvalidOperationException ex) { wspErr = ex.Message; return; } catch (Exception ex) { wspErr = ex.Message; } } //-- Обработка строки выборки insert public static void sp_Ins(dlg_RowToEntity RowToEntity) { try { if (reader.Read()) RowToEntity?.Invoke(reader); else wspErr = "Не читаются изменения"; } catch (System.InvalidOperationException ex) { wspErr = ex.Message; return; } catch (Exception ex) { wspErr = ex.Message;} } //-- Обработка строки выборки update public static void sp_Upd(dlg_RowToEntity RowToEntity) { int i = 0; try { if (reader.Read()) { i = reader.FieldCount; i = (int)reader.GetInt32(i - 1); RowToEntity(reader); if (i != 1) wspErr = "Запись кем то изменена"; } else wspErr = "Не читаются изменения"; } catch (System.InvalidOperationException ex) { wspErr = ex.Message; return; } catch (Exception ex) { wspErr = ex.Message; } } //-- Обработка строки выборки delete public static void sp_Del(dlg_RowToEntity RowToEntity) { try { if (reader.Read()) { //-- Если читаем якобы удаленную строку, то удаления нет RowToEntity(reader); wspErr = "Запись кем то изменена"; } } catch (System.InvalidOperationException ex) { wspErr = ex.Message; return; } catch (Exception ex) { wspErr = ex.Message; } } //-- Выполнение хранимой процедуры public static void Entity_SP(string spname, dlg_sp sp, object[][] psp, dlg_RowToEntity RowToEntity) { bMax = false; //-- Возможно объём выборки не превысит максимально допустимого nRow = 0; //-- Число строк в выборке wspErr = null; int n = (psp==null)? 0: psp.Length; SqlParameter[] asp = new SqlParameter[n]; try { for (int i=0;i<n;i++) asp[i] = new SqlParameter((string)psp[i][0], psp[i][1]); //{ //str= (string)psp[i][0]; str = str.IndexOf(@"@") == 0 ? str : @"@" + str; //asp[i] = new SqlParameter(str, psp[i][1]); //} using (SqlConnection connection = new SqlConnection(гп.str_Соединение)) { connection.Open(); SqlCommand command = new SqlCommand("", connection); command.Parameters.Clear(); command.Parameters.AddRange(asp); command.CommandText = spname; command.CommandType = CommandType.StoredProcedure; //-- Формируем коллекцию из выборки using (reader = command.ExecuteReader()) { sp(RowToEntity); } } } catch (Exception ex){ wspErr = ex.Message; } } //-- Выполнение хранимой процедуры public static void Entity_Txt(string text, object[][] psp, dlg_RowToEntity RowToEntity) { nRow = 0; //-- Число строк в выборке SqlDataReader reader; wspErr = null; int n = (psp == null) ? 0 : psp.Length; SqlParameter[] asp = new SqlParameter[n]; try { for (int i = 0; i < n; i++) asp[i] = new SqlParameter((string)psp[i][0], psp[i][1]); //{ //str= (string)psp[i][0]; str = str.IndexOf(@"@") == 0 ? str : @"@" + str; //asp[i] = new SqlParameter(str, psp[i][1]); //} using (SqlConnection connection = new SqlConnection(гп.str_Соединение)) { connection.Open(); SqlCommand command = new SqlCommand("", connection); command.Parameters.Clear(); command.Parameters.AddRange(asp); command.CommandText = text; command.CommandType = CommandType.Text; //-- Формируем коллекцию из выборки using (reader = (SqlDataReader)command.ExecuteReader()) { sp_Sel(RowToEntity); } } } catch (Exception ex) { wspErr = ex.Message; } } } } |
20 янв 19, 14:54 [21789651] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
ВМоисеев, то есть Вы ему предлагаете просто скопипастить вышеуказанный код? |
20 янв 19, 14:55 [21789655] Ответить | Цитировать Сообщить модератору |
Petro123 Member Откуда: Загрузочный сектор Москвы (AutoPOI.ru) Сообщений: 38643 |
))) |
||
20 янв 19, 15:08 [21789666] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 14:55 [21789655] >то есть Вы ему предлагаете просто скопипастить вышеуказанный код? <Для своих приложений делаю именно так, а он пусть подходит творчески |
20 янв 19, 15:47 [21789692] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Понятно. Из приложения в приложение копипастите код. Что мешает оформить как библиотеку? Завернуть в пакет? |
||
20 янв 19, 15:51 [21789694] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 15:51 [21789694] >Что мешает оформить как библиотеку? Завернуть в пакет? <Ничего. Как то не до того, да и коды для Oracle и MSSQL не тождественны. |
20 янв 19, 16:01 [21789699] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 15:51 [21789694] >...Из приложения в приложение копипастите код. <Я может быть недопонимаю Вас. Код находится в wsp.cs. К сообщению приложен файл. Размер - 41Kb |
20 янв 19, 16:12 [21789702] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Выше вы писали:
Выходит Вы из приложения в приложение копипастите код. Почему? |
||||
20 янв 19, 17:13 [21789736] Ответить | Цитировать Сообщить модератору |
ВМоисеев Member Откуда: Редкино Сообщений: 2013 |
>Дмитрий Мух, сегодня, 17:13 [21789736] >Выходит Вы из приложения в приложение копипастите код. Почему? <Я не понимаю Вас. Вот одно SPA, что находится в хранилище: db_Хранилище.rar Вот другое SPA, развернутое и работающее на клиенте: К сообщению приложен файл. Размер - 10Kb |
20 янв 19, 17:44 [21789751] Ответить | Цитировать Сообщить модератору |
ViPRos Member Откуда: Сообщений: 9659 |
и так будет до 2030 ого года |
20 янв 19, 18:27 [21789773] Ответить | Цитировать Сообщить модератору |
Дмитрий Мух Member Откуда: Зеленоград Сообщений: 2739 |
Классно! Проехали :) |
||
20 янв 19, 18:33 [21789774] Ответить | Цитировать Сообщить модератору |
hVostt Member Откуда: Сообщений: 16272 |
Я тут немного ещё накину, так никогда не делайте, ребята. Такая "обработка ошибок" это лютый зашквар. ![]() |
||
21 янв 19, 00:59 [21789915] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 [3] 4 5 6 вперед Ctrl→ все |
Все форумы / WinForms, .Net Framework | ![]() |