Путь разработчика    

Используйте SQL-запросы для отображения данных master-detail в C#

eda2480d

В этом примере SQL-запросы запрашивают данные master-detail только тогда, когда это необходимо. В течение довольно долгого времени .NET-ish способ манипулировать данными из базы данных состоял в том, чтобы загрузить его в DataSet, хранящийся в памяти, а затем работать с ним там. Вы можете отображать данные, привязывать их к элементам управления, изменять значения и, в противном случае, использовать их. Когда вы сделаете какие-либо изменения, вы сохраните изменения обратно в базу данных. (Совсем недавно вы можете использовать инфраструктуру сущности для работы с данными, как если бы она хранилась в объектах вместо базы данных, но способ, которым данные извлекаются и изменения перемещаются обратно в базу данных, аналогичны.)

Этот подход работает хорошо, если вам нужно работать только с небольшими объемами данных, и если несколько пользователей не пытаются работать с одними и теми же данными одновременно. Однако, если у вас есть огромная база данных? Например, если база данных содержит биллинговые записи для 1 миллиона клиентов. Или что, если два пользователя загружают и изменяют одни и те же данные? Как узнать, какие изменения необходимо сохранить в базе данных? В этих случаях загрузка всех данных в DataSet работает не очень хорошо.

Данные мастер-детали также объединяют проблему с подходом .NET-ish, потому что для этого требуется, чтобы вы загружали все данные из основных и подробных таблиц, даже если вы никогда не будете использовать большую часть подробных данных.

В этом примере демонстрируется метод, который я использовал в проектах, где могут возникать такие ситуации. Идея состоит в том, чтобы использовать SQL-запросы для загрузки только тех данных, которые вам нужны. Затем вы показываете его непосредственно в элементах управления формы. Вероятно, вы можете использовать привязку данных, чтобы упростить отображение, но приведенная здесь методика достаточно проста и упрощает точное определение того, что происходит.

При запуске программы он использует следующий код для создания подключения к базе данных и сборки списка студентов из таблицы Адреса базы данных.

Python

На уровне класса код определяет объект OleDbConnection. Обработчик события Load формы инициализирует этот объект строкой соединения. Затем он вызывает следующий ListStudents метод, чтобы составить список студентов.

Python

Этот метод создает объект OleDbCommand для выполнения запроса, который выбирает StudentId, FirstName и LastName полей из таблицы Адреса. Он открывает соединение с базой данных, выполняет команду и проходит через результаты. Для каждой возвращенной записи метод создает объект Student и добавляет его в ComboBox с именем cboStudents.

В следующем коде показан класс Student.

Python

Этот класс просто содержит значения студента StudentId, FirstName и LastName. Он предоставляет конструктор, облегчающий инициализацию нового объекта. Он также переопределяет метод ToString, поэтому ListBox или ComboBox будет отображать последние и первые имена объекта Student.

Это конец кода, который загружает данные основного ученика при запуске программы. Когда вы выбираете ученика из ComboBox, следующий код отображает подробные данные ученика.

Python

Этот код получает объект Student, выбранный в ComboBox. Он создает запрос для получения данных в таблице Students для этого Student объекта StudentId. (Вы можете избежать этого запроса, выбрав эти данные в исходном запросе при запуске программы и сохранении данных в объекте Student.) Программа выполняет запрос и отображает данные адреса студента в текстовых полях.

Затем программа создает запрос для получения данных в таблице TestScores для Student объекта StudentId. Программа выполняет запрос и добавляет данные тестовой оценки в lstScores ListBox. Он также сохраняет общее количество баллов и количество записей TestScores.

После того, как он отображает результаты тестов, программа вычисляет средний балл студента и отображает его в txtAverage TextBox.

Вот и все. Эта программа сохраняет память по решению DataSet в двух местах. Во-первых, когда он запускается, программа загружает только имена учеников и идентификаторы. Решение DataSet загрузило бы все данные Addresses. Если в базе данных содержались лоты (тысячи) учащихся, а записи Адреса были большими, DataSet будет использовать гораздо больше памяти.

Во-вторых, метод DataSet также загружает всю таблицу TestScores при запуске программы. Если в базе данных тысячи учеников с десятком или более баллов для тестирования, это потребует большой памяти. Этот пример загружает только тестовые баллы для выбранного вами ученика в любой момент времени.

Одним из преимуществ подхода DataSet является то, что он выполняет весь свой выбор данных в начале, поэтому данные загружаются и готовятся позже, когда вам это нужно. ( DataSet также достаточно умен, чтобы не сохранять данные, которые не были изменены, поэтому он не тратит время на загрузку данных, если вы не вносите никаких изменений.)

Этот пример извлекает данные ученика позже, когда вы выбираете этого ученика. Это требует большего количества поездок в базу данных и, как правило, медленнее, чем одна большая поездка туда и обратно. Однако, если у вас большая база данных, вам, вероятно, не нужно будет использовать большую часть данных. Выбор заключается в выборе всего всего сразу или выборе крошечной части базы данных в нескольких запросах.

Подход с несколькими запросами также выполняет свои запросы, когда пользователь выбирает ученика. Есть небольшая задержка, но пользователь этого не замечает. (Фактически, в первый раз, когда вы выбираете ученика, наблюдается заметная задержка. Я думаю, что база данных тратит время на создание плана выполнения запроса и кэширует план для последующего использования. Также может происходить кэширование данных здесь. кто-нибудь имеет более глубокое понимание этого, пожалуйста, напишите комментарий.)

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

Источник: http://csharphelper.com/blog/2016/03/use-sql-queries-to-display-masterdetail-data-in-c/



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Почему Java не поддерживает указатели?

Большинство исследований согласны с тем, что указатели являются одной из основных функций, которые позволяют разработчикам вводить ошибки в свой код. Когда...

23 11 2020 15:45:35

StringTokenizer в Java

Класс StringTokenizer пакета Java.util позволяет приложению разбивать или разбивать строку на мелкие части с помощью определенного разделителя (пробел явля...

22 11 2020 16:38:54

Как использовать анонимные методы в C#

Мой предыдущий пост Использование предопределенные типы делегатов Action, Func и EventHandler в C# объясняют, как использовать предопределенные общие типы...

21 11 2020 4:47:28

Сделайте слайдер с иглой в C#

Этот пример рисует вертикальную «иголку» в PictureBox, чтобы пользователь мог выбрать значение, как это делает TrackBar. Однако код выполняет весь чертеж,...

20 11 2020 13:34:27

Выполнение специальных команд SQL в C#

В этом примере используется OLE DB для подключения к базе данных доступа. ( К сожалению, этот метод не может создать базу данных, но вы можете использовать...

19 11 2020 4:30:30

Break и Continue в Python

Иногда желательно пропустить некоторые утверждения внутри цикла или немедленно завершить цикл, не проверяя тестовое выражение. В таких случаях мы можем исп...

18 11 2020 22:33:43

Как предотвратить модификацию объекта в JavaScript?

Существует множество способов блокировки объекта в соответствии с вашими потребностями. Object.freeze() Object.seal() Object.preventExtensions() Object.fre...

17 11 2020 4:28:52

Объектно-ориентированное программирование в С++ (Лафоре Р. 2004)

Изучение объектно-ориентированной парадигмы программирования обычно ассоциируется с многочасовым курсом лекций и утомительными лабораторными занятиями, во...

16 11 2020 0:52:21

List (список) в Python

List ( Список) в Python - один из наиболее часто используемых и очень универсальных типов данных, используемых в Python. Списки являются объектами и содержа...

15 11 2020 2:53:54

Создание вашей первой программы на Python

Запуск Pytthon Interpreter После установки интерпретатор python живет в установленной директории. На компьютерах Windows установка Python обычно помещается...

14 11 2020 2:36:30

В чем разница между JDK и JRE?

JDK является акронимом для Java Development Kit. Это набор программных компонентов, который используется для разработки приложений на основе Java, включает...

13 11 2020 17:20:36

Инициализировать двумерные массивы в C#

Пример Инициализация массивов, списков и экземпляров классов в C# объясняется, как инициализировать одномерный массив. Вы можете использовать аналогичный с...

12 11 2020 13:16:31

Метод Substring() в Java

Подстрока является частью строки. Метод String substring() Java String возвращает новый строковый объект из данной строки. Синтаксис String str = "Java Str...

11 11 2020 3:35:31

Что такое отказобезопасные и отказоустойчивые итераторы в Java

Неуправляемые итераторы Fail-Fast iterators, возвращенные большинством типов коллекций, не переносят каких-либо структурных изменений в коллекции, итерации...

10 11 2020 16:55:34

Выполнение нескольких действий по умолчанию в C#

Иногда (но не часто!) полезно, чтобы форма выполняла несколько действий по умолчанию в зависимости от той части формы, которую использует пользователь. В э...

09 11 2020 10:45:57

Смотрите, где парабола и гипербола пересекаются в C#

В этом примере показано, как пересекаться парабола и гипербола. Предыдущий пример из четырех частей здесь , здесь < / a>, здесь , и здесь объясняет, как на...

08 11 2020 21:37:30

Создайте список недавно использованных файлов (MRU) в C#

В списке MRU отображаются файлы, которые программа использовала совсем недавно в меню. Если пользователь выбирает файл из списка, программа снова открывает...

07 11 2020 5:11:33

Бухгалтерский и налоговый учет в 1С:Бухгалтерии 8 (С.Харитонов)

В пособии " Бухгалтерский и налоговый учет в 1 С: Бухгалтерии 8" рассматривается технология ведения бухгалтерского и налогового учета в программе "1 С: Бухгалте...

06 11 2020 16:33:40

Перемещение окна с названием, которое соответствует шаблону в C#

Пример Установите размер и положение другого приложения в C# использует функцию API FindWindow, чтобы найти окно с данным заголовком. К сожалению, FindWind...

05 11 2020 4:31:40

Открытие нового окна в JavaScript

Вы можете использовать JavaScript для запуска нового окна. Метод window.open(), который позволяет открыть новое окно браузера без перехода от текущей стран...

04 11 2020 13:26:33

Комментарии в C#

Комментарии используются для документирования того, что делает программа, и каких конкретных блоков или строк кода.  Компилятор C# игнорирует комментарии. Е...

03 11 2020 5:20:53

События JavaScript DOM

События - это определенные действия, выполняемые конечным пользователем или самим веб-браузером. Он может запускаться в любой части документа, независимо о...

02 11 2020 4:30:19

Использование веб-браузера в Python

Модуль webbrowser предоставляет интерфейс высокого уровня, позволяющий пользователям просматривать веб-документы. В большинстве случаев простое вызов функц...

01 11 2020 8:34:35

Язык программирования Python (Д.С.Откидач)

Python является простым и, в то же время, мощным интерпретируемым объектно-ориентированным языком программирования. Он предоставляет структуры данных высок...

31 10 2020 16:10:16

Как реализовать «enum» в Python

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

30 10 2020 4:30:16

Как ClassLoader работает на Java?

Java Classloader является частью JRE (Java Runtime Environment), которая динамически загружает классы Java в JVM (виртуальная машина Java). В частности, Ja...

29 10 2020 1:22:33

Используйте WMI для получения количества физических и логических процессоров в C#

В этом примере показано, как вы можете определить количество процессоров вашего компьютера, как физических, так и логических. Многие компьютеры в наши дни...

28 10 2020 23:58:33

Изучаем Python, 4-е издание (Марк Лутц)

Такие известные компании, как Google и Intel, Cisco и Hewlett-Packard, используют язык Python, выбрав его за гибкость, простоту использования и обеспечивае...

27 10 2020 1:13:38

With в Python

В python ключевое слово with используется при работе с неуправляемыми ресурсами (например, файловыми потоками). Инструкция for упрощает обработку исключени...

26 10 2020 17:50:42

Как аннотации работают на Java?

Аннотации Java используются для предоставления метаданных для Java-кода, хотя они не являются частью самой программы. Метаданные - это данные о данных. Так...

25 10 2020 23:42:50

Восстановить контроль в C#

Изменение родительского элемента управления легко. Просто установите его свойство Parent в элемент управления, который должен содержать его. В этом примере...

24 10 2020 21:12:29

В чем разница между Reader и InputStream в Java

InputStreams используются для чтения байтов из потока. Он захватывает байты данных байтом без какого-либо перевода. Поэтому они полезны для двоичных данных...

23 10 2020 3:41:16

Нарисуйте цветное колесо цвета в C#

Пример Нарисуйте цветное колесо на C# , рисует цвет колесо. Для этого он делает ряд точек по периметру круга, где каждая точка имеет разный цвет радуги. За...

22 10 2020 2:49:21

Разница между памятью Stack and Heap в Java

Модель Java Heap и Stack Memory определяет, как и когда разные потоки могут видеть значения, записанные в общие переменные другими потоками, и как синхрони...

21 10 2020 4:22:23

Как нарисовать пронумерованные круги и сохранить их в файлах на C#

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

20 10 2020 19:29:31

Hello World! Первая программа на Java

Наиболее распространенным примером первой Java-программы является знаменитый Hello World! программа. Прежде чем перейти к первой программе Java, вы должны...

19 10 2020 21:56:36

Преобразование типа Python

Python имеет пять стандартных типов данных. Иногда необходимо преобразовывать значения из одного типа в другой. Python определяет функции преобразования ти...

18 10 2020 9:53:12

Плитка PictureBox в C#

Если вы устанавливаете свойство BackgroundImageLayout формы >, то элемент управления заполняется копиями его фонового изображения. Странно, что элемент упр...

17 10 2020 2:17:45

Что такое ассоциативный массив? Как мы его используем? JavaScript

Ассоциативный массив - это просто набор пар значений ключа. Когда мы определяем объект, JavaScript автоматически создает массив для этого объекта. Это позв...

16 10 2020 10:34:36

Сделайте программу калейдоскопа в C#

Когда вы нажимаете и рисуете форму этой программы, код рисует другие кривые, связанные с вашим, для создания эффекта калейдоскопа. Например, он может нарис...

15 10 2020 13:57:35

Используйте двойную буферизацию, чтобы предотвратить мерцание в PictureBox в C#

Пример Использование двойной буферизации для предотвращать мерцание при рисовании на C# показывает, как сделать форму, использующую двойную буферизацию для...

14 10 2020 12:46:47

Сравнение строк в Java

Класс Java String имеет ряд методов сравнения строк. Ниже приведены некоторые из часто используемых методов: Операторы == для сравнения, а не значения, рав...

13 10 2020 19:57:53

Сравните скорости LINQ для разных подходов в C#

В этом примере сравниваются скорости LINQ при использовании LINQ различными способами. Чтобы найти минимальные и максимальные значения X в List & lt; Point...

12 10 2020 17:56:26

Как получить изображение элемента управления, формы или клиентской области формы в C#

В этом примере показано, как получить изображение элемента управления. Поскольку форма является типом управления, тот же метод позволяет получить образ фор...

11 10 2020 15:13:20

Порог цвета к изображению в C#

Пример Предоставляет гамма-коррекцию для изображения в C# использует метод ImageAttribute объекта SetGamma для гамма-коррекции изображения. В этом примере...

10 10 2020 3:42:52

Нарисуйте текст на кривой в C#

Пример Нарисуйте текст в сегменте линии в C# показывает, как рисовать текст, следующий за сегментом линии. В этом примере этот код используется для рисован...

09 10 2020 22:50:56

Изменение ориентации и полей печати в C#

В этом примере показано, как изменить ориентацию и поля печати в распечатке или предварительном просмотре печати. По умолчанию, когда вы показываете предва...

08 10 2020 12:56:55

Изучаем Python, 4-е издание (Марк Лутц)

Такие известные компании, как Google и Intel, Cisco и Hewlett-Packard, используют язык Python, выбрав его за гибкость, простоту использования и обеспечивае...

07 10 2020 19:49:46

Что делает ключевое слово yield в Python?

Если компилятор определяет ключевое слово yield внутри функции, эта функция больше не возвращается через оператор return. Вместо этого он немедленно возвра...

06 10 2020 11:49:36

Почему множественное наследование не поддерживается в Java

Это просто устранить двусмысленность, поскольку множественное наследование может вызвать двусмысленность вокруг проблемы Diamond в нескольких сценариях. На...

05 10 2020 2:41:24

Что подразумевается под анонимным классом в Java?

Анонимный класс в Java - это класс, которому не присвоено имя, и объявляется и создается в одном выражении. Анонимный класс обычно используется на платформ...

04 10 2020 20:16:50

Почему Java не поддерживает перегрузку оператора?

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

03 10 2020 11:42:52

Как составить список проверенных узлов TreeView в C#

Если для свойства CheckBoxes элемента управления TreeView установлено значение true, тогда элемент управления отображает поля, которые пользователь может п...

02 10 2020 0:59:55

Разница между system.gc() и runtime.gc() в Java

Типичный алгоритм сбора мусора (GC) в Java идентифицирует мусор, перемещая все ненужные объекты в куче и предполагая, что любой объект, который не был посе...

01 10 2020 6:10:31

Массивы в C#

Массив в C#: Массив - это коллекция того же типа данных Массив может быть объявлен как фиксированный размер или динамический Массив может быть доступен по...

30 09 2020 13:31:32

История языков программирования: развитие и создание

История создания и развития языков программирования довольно захватывающая и интересная. Рассмотрим же основные этапы становления этой важнейшей сферы деятельности...

29 09 2020 5:46:13

Почему Java не поддерживает перегрузку оператора?

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

28 09 2020 10:24:38

Получить системные показатели в C#

Функция API GetSystemMetrics возвращает системные метрики, значения, которые дают размеры, используемые системой, такие как размер значков по умолчанию и т...

27 09 2020 11:23:55

Как загрузить и установить Python

Python - очень популярный язык программирования, который можно использовать для создания веб-сайтов, игр, научного программного обеспечения, графики и мног...

26 09 2020 19:33:52

Многопоточное программирование сокетов в Java?

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

25 09 2020 4:12:36

Нарисуйте цветное колесо в C#

В программе используется PathGradientBrush, чтобы заполнить цветовое колесо цветовыми образцами. Рисование колеса в основном автоматическое, но прикладывае...

24 09 2020 4:48:31

Set (набор) в Python

Python Set похож на словарь, неупорядоченный набор ключей, который хранится без каких-либо значений. Тип набор изменяемый , содержание может быть изменено...

23 09 2020 14:13:53

Отображение местного времени и GMT в C#

В этом примере используется Timer для выполнения следующего кода каждые полсекунды. Вначале используется DateTime.Now для получения текущей даты и времени....

22 09 2020 7:28:14

Как отобразить текст в StatusLabel, даже если он не подходит для C#

Если текст, отображаемый в StatusLabel, слишком длинный, чтобы вписаться в содержащийся элемент StatusStrip, тогда по умолчанию StatusLabel не показывать ч...

21 09 2020 18:33:29

Изменение разрешения изображения в C#

В этом примере показано, как изменить разрешение изображения. Это еще один пример, который я создал для написания книг. Обычно компьютеры работают с изобра...

20 09 2020 2:55:21

Как открыть и прочитать URL-адрес в Java

Чтение с URL-адреса так же просто, как чтение из входного потока. URL - это аббревиатура Uniform Resource Locator. Java-программы, которые взаимодействуют...

19 09 2020 17:45:22

Каковы основные интерфейсы Java Collections Framework

Структура Java Collection обеспечивает интерфейсы и реализации классов, которые позволяют обрабатывать данные простым и значимым. Интерфейс Collection нахо...

18 09 2020 8:44:56

Ассемблер - это просто. Учимся программировать. (Калашников О. А.)

Подробно и доходчиво объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, о...

17 09 2020 16:21:57

Почему я получаю NoClassDefFoundError в Java?

Определение класса можно запросить во время вызова метода или при создании нового экземпляра с использованием нового выражения. NoClassDefFoundError означа...

16 09 2020 4:50:18

Разница между статическими и нестатистическими методами Java

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

15 09 2020 7:17:12

Как активировать другую запущенную программу в C#

Это на самом деле довольно просто. Сначала добавьте ссылку на библиотеку Microsoft.VisualBasic. Затем вызовите Microsoft.VisualBasic.Interaction.AppActivat...

14 09 2020 0:50:15

Как получить IP-адрес в Python

Модуль сокетов в Python обеспечивает доступ к интерфейсу сокетов BSD. Имя socket.gethostbyname (имя хоста) переводит имя хоста в формат адреса IPv4. Адрес...

13 09 2020 16:14:52

Как сделать сохранения в Unity 5 при помощи Newtonsoft.Json

В этом уроке мы разберем как сделать сохранения в Unity 5 при помощи библиотеки Newtonsoft.Json и разберем некоторые её свойства....

12 09 2020 12:40:56

Возможности Python

Важные функции Python: Язык начинающего Простой и легкий в изучении Интерпретированный язык Межплатформенный язык Свободный и открытый источник Объектно-ор...

11 09 2020 7:30:26

Привет мир! Ваши первые программы на JavaScript

Скопируйте и вставьте следующий HTML-код в файл (например, « Блокнот») и сохраните как «first.html». После сохранения файла дважды щелкните файл «first.html...

10 09 2020 14:12:23

Разница между абстрактным классом и интерфейсом в Java

Термин « Абстракция» означает скрытие внутренней реализации функции и только отображение функциональности для пользователей. Это означает, что абстрактный к...

09 09 2020 17:37:30


Parse error: syntax error, unexpected ',' in /home/users/9/9165884745/domains/flash-mx.ru/lessons/926.php on line 69