Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Введение в работу с базами данныхСтр 1 из 10Следующая ⇒
СПб ГБПОУ «КОЛЛЕДЖ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ»
Методические указания к выполнению практических работ
по МДК 03.01 Технология разработки программного обеспечения
Специальность 09.02.03 «Программирование в компьютерных системах»
Преподаватель: Шапкина Л.М.
Рассмотрены на заседании цикловой комиссии спецдисциплин (протокол № ___ от « ___ » __________2016 г.)
Председатель цикловой комиссии спецдисциплин _____________
Санкт-Петербург 2016 г. Оглавление Общие сведения. 3 Варианты заданий. 11 Практическая работа №01 Элементы Visual Studio 2012 C# для создания информационных систем 12 Практическая работа №02 Подключение базы данных ACCESS в Visual Studio 2012 C# методом ADO (визуальное). 21 Практическая работа №03 Подключение базы данных ACCESS в Visual Studio 2012 C# методом ADO (программное). 33 Практическая работа №04 Корректировка базы данных ACCESS в Visual Studio 2012 C# (визуальное создание). 39 Практическая работа №06 Работа с датами в ACCESS в Visual Studio 2012 C#. 48 Практическая работа №07 Фильтрация данных в Visual Studio 2012 C#. 53 Практическая работа №08 Сортировка данных в Visual Studio 2012 C#. 56 Практическая работа №09 Фильтрация данных по дате в Visual Studio 2012 C#. 59 Практическая работа №10 Вычисляемые поля в Visual Studio 2012 C#. 64 Практическая работа №11 Группировка данных в Visual Studio 2012 C#. 69 Практическая работа №12 Подсчет значений данных по столбцам в Visual Studio 2012 C#. 78 Практическая работа №13 Поиск данных в таблице БД в Visual Studio 2012 C#. 84 Практическая работа №14 Простой отчет на базе одной таблицы в Visual Studio 2012 C#. 88 Практическая работа №15 Пароль из БД в Visual Studio 2012 C#. 100 Практическая работа №16 Приложение с двумя формами в Visual Studio 2012 C#. 103 Практическая работа №17 Ведение таблицы БД в Visual Studio 2012 C#. 109 Практическая работа №18 Ведение таблицы БД с изображениями в Visual Studio 2012 C#. 114 Практическая работа №19 Параметрический запрос к таблице БД в Visual Studio 2012 C#. 116 Литература. 121 Интернет-источники. 121
Общие сведения
Что такое.NET Framework?
Программировать на языке C# без.NET Framework — это все равно что писать ручкой без чернил. Сколько ни води ею по бумаге, написать ничего не удастся. Так что же такое.NET Framework? Это платформа программирования, разработанная корпорацией Microsoft, и язык C# создавался специально для нее. Платформа.NET Framework состоит из двух частей. 1. Во-первых, она содержит огромную библиотеку классов, которые можно вызывать из программ, созданных на C#. Такая возможность избавляет от необходимости писать все заново. 2. Во-вторых, в ее состав входит среда выполнения, управляющая запуском и работой готовых программ (это происходит абсолютно незаметно для вас и не вызывает никаких затруднений). Итак, при написании программы на языке C# (или на любом другом языке.NET) наряду с созданием собственного кода используются классы, хранящиеся в библиотеке. Библиотека.NET framework содержит огромное количество классов. Как о них узнать? Для этого есть несколько способов: • Просмотреть библиотеку классов.NET Framework SDK (Software Development Kit – набор средств разработки), которая включена в справочную систему Visual C# Express. • Воспользоваться интеллектуальной подсказкой Visual C# Express. Как только вы введете в ее окошко имя пространства имен или класса и поставите точку, автоматически раскроется список всех доступных классов, методов, полей. Достаточно выбрать нужный элемент списка. Например, после ввода " Console." вы увидите список методов и других элементов класса Console. Подсказка работает и для методов. Если поставите открывающую скобку после имени метода, то увидите типы параметров, которые он может принимать. Зачастую в C# используются одноименные методы с различными наборами параметров — в таком случае список надо " прокручивать" (перемещаться по нему) вверх и вниз при помощи клавиш с изображенными на них стрелками. Если требуется писать программы, похожие на привычные приложения Windows, то наверняка воспользуетесь классами из пространства имен System.Windows.Forms. Они позволяют задействовать кнопки, списки, текстовые поля, меню, окна сообщений и множество других " элементов управления". Элементы управления — это то, что вы помещаете в форму. Они нужны для вывода информации, например, текстовой (элемент управления Label ) или графической (элемент управления PictureBox ), либо для выполнения определенных действий, например, выбора значения или перехода к другой форме после нажатия кнопки. Все элементы управления помещаются на форму. Понятие " форма", принятое в программировании, родственно понятию " форма анкеты" или " форма документа" из обычной жизни. На форме можно в определенном порядке расположить различные элементы (текст, картинки, поля для заполнения и т. д.). Когда нам дают готовую форму документа и просят ее заполнить, мы обычно читаем содержащуюся в ней типовую информацию, а затемвписываем недостающие данные в определенные строки. В программировании понятие формы во многом похоже: форма позволяет размещать текст, изображения, поля ввода, кнопки и т. п., добиваясь их точного расположения на экране. В консольном приложении на экран выводятся только строки текста. Компания Майкрософт предоставила в составе библиотеки классов.NET Framework огромное количество " элементов управления", которые можно помещать на формы. Освоив этот инструмент, вы сможете быстро создавать эффектные приложения. Некоторые полезные классы из пространства имен System.Windows.Forms Вот некоторые элементы управления, которые можно размещать на формах: • Label (Надпись). • Button (Кнопка). • ListBox (Список). • CheckBox (Флажок). • RadioButton (Переключатель). • MessageBox (Окно сообщений). • Menu (Меню). • TabControl (Управление вкладками). • Toolbar (Панель инструментов). • TreeView (Дерево). • DataGrid (Сетка данных). • PictureBox (Изображение). • RichTextBox (Текстовое поле с поддержкой формата RTF).
Язык SQL
Существует множество разнообразных систем управления базами данных: Microsoft Access, Oracle, DB2, Microsoft SQL Server, Informix, mySQL, и это далеко не полный список. А нам необходимо обратиться к базе данных из программы на языке C# и " объяснить" ей, что мы ищем. Проще всего включить в код C# фрагмент на " языке базы данных", с помощью которого выполняется запрос к базе данных на получение нужных столбцов и строк. Существует еще и промежуточный уровень – ADO.NET. Много лет назад специалисты по базам данных договорились об использовании " единого языка баз данных", который понимали бы большинство существующих баз данных. Они назвали его SQL (от англ. Structured Query Language — язык структурированных запросов). Не следует путать язык SQL с системой управления базами данных SQL Server, разработанной корпорацией Microsoft. ЯзыкSQL поддерживают системы управления базами данных (СУБД), выпускаемые самыми разными производителями.
Ниже приведены примеры операторов на языке SQL и описывается результат их выполнения. Основными командами SQL являются: • SELECT (для выбора некоторых данных); • INSERT (для добавления новых данных); • UPDATE (для изменения информации, уже существующей в базе данных). Приведем примеры каждой команды. Как правило, оператор SELECT записывается следующим образом: SELECT < имена извлекаемых столбцов> FROM < имена одной или нескольких таблиц базы данных> WHERE < условие выбора> Рассмотрим пример выбора данных оператором SELECT: SELECT * FROM PLANET Символ звездочка * означает выбор всех столбцов таблицы. Поэтому данный оператор вернет из базы данных всю таблицу Planetсо всеми строками и столбцами.
Рассмотрим оператор SELECT PlanetName, Inhabitants FROM PLANET Этот запрос возвращает столбцы PlanetName и Inhabitants со всеми строками из таблицы PLANET. PlanetName Inhabitants Меркурий Меркуриане Венера Венериане Земля Земляне Марс Марсиане Юпитер Юпитериане Знок Знокиане Сатурн Сатурниане Уран Ураниане Нептун Нептуниане Плутон Плутониане
Запрос SELECT PlanetName, Inhabitants FROM PLANET WHERE PlanetName='Венера' возвращает столбцы PlanetName и Inhabitants из таблицы PLANET. В результат его выполнения будут включены только те строки, которые содержат значение Венера в столбце PlanetName. PlanetName Inhabitants Венера Венериане
Запрос: SELECT PlanetName, Population FROM POPULATION WHERE Population< 100000 возвращает из таблицы POPULATION строки столбцов PlanetName и Population, для которых значение столбца Population меньше 100000. PlanetName Population Меркурий 40000 Венера 25 Нептун < NULL> Плутон < NULL> Меркурий 35000 Венера 3 Знок 8700 Нептун < NULL> Плутон < NULL>
Как правило, оператор INSERT записывается следующим образом: INSERT INTO < таблица базы данных, к которой добавляются строки> (< названия столбцов, в которые будут добавляться значения> ) VALUES (< значения, которые будут вставлены в указанные столбцы> ) Пример: INSERT INTO PLANET (PlanetName, DistanceFromSun, Inhabitants) VALUES (Флафф, 23500000, 'Флаффиане') Оператор INSERT добавляет в таблицу PLANET новую строку. Он не возвращает какого-либо результата в программу, но после его выполнения таблица примет вот такой вид: Архитектура ADO.NET В ADO.NET используется многоуровневая архитектура, которая обращается вокруг небольшого числа ключевых концепций, таких как объекты Connection, Command и DataSet. Однако архитектура ADO.NET серьезно отличается от классической архитекуры ADO.
Поставщики данных в ADO.NET Поставщик данных (data provider) — это набор классов ADO.NET, которые позволяют получать доступ к определенной базе данных, выполнять команды SQL и извлекать данные. По сути, поставщик данных — это мост между вашим приложением и источником данных. В первом приближении поставщик данных можно рассматривать как набор типов, определенных в данном пространстве имен, который предназначен для взаимодействия с конкретным источником данных. Однако независимо от используемого поставщика данных, каждый из них определяет набор классов, обеспечивающих основную функциональность. В таблице ниже приведены некоторые общие основные объекты, их базовые классы (определенные в пространстве имен System.Data.Common) и основные интерфейсы (определенные в пространстве имен System.Data), которые они реализуют:
Конкретные имена этих основных классов различаются у различных поставщиков (например, SqlConnection, OracleConnection, OdbcConnection и MySqlConnection), но все эти объекты порождены от одного и того же базового класса (в случае объектов подключения это DbConnection), который реализует идентичные интерфейсы (вроде IDbConnection). На рисунке ниже показаны уровни модели поставщиков ADO.NET:
Технология OLE DB существует уже много лет как часть ADO, поэтому для большинства источников данных предусмотрены драйверы OLE DB (включая SQL Server, Oracle, Access, MySQL и многие другие).
Варианты заданий Выбрать предметную область в соответствии со своим номером в журнале группы.
Теоретический материал Работа с примерами программ Windows Forms в Visual C# Express Для каждого проекта C# сразу же создает два файла (с именами Form1.cs и Program.cs ) и наполняет их исходным кодом на языке C#, то есть изначально получаем простейшую, но полноценную программу. Демонстрационный проект имеет большой объем и предназначен для справочного использования. Поэтому нет необходимости вводить текст вручную.
Действия:
Результат работы программы следует тщательно изучить. После запуска программы открывается форма, в которой меню построено при помощи элемента управления TreeView. Пункты меню представлены в виде листьев на ветке дерева. Выбор того или иного листочка приводит к тому, что обработчик события заселяет форму новыми элементами управления. Поскольку эти элементы задаются определенным пунктом меню, их тип зависит от того, какой именно пункт выбран. С добавляемыми элементами тоже можно работать. Благодаря этому проекту появляется возможность познакомиться с самыми разными элементами управления, а главное — понять, как они создаются и как их использовать в собственных проектах. Досконально разбирать текст всей программы необязательно, но когда у вас возникнут вопросы по использованию, например, элемента CheckBox, можно просмотреть ту ее часть, которая касается этого элемента. Текст программы using System; using System.Windows.Forms; using System.Drawing; using System.Data; using System.Xml; using System.IO;
class FormWithManyControls: Form { TreeView treeView1; Panel panel1; CheckBox checkBox1, checkBox2; RadioButton radioButton1, radioButton2; ListBox listBox1;
// Метод-конструктор нашего класса public FormWithManyControls() { // Указываем размеры и заголовок окна this.Text = " Форма, включающая различные элементы управления! "; this.Height = 800; this.Width = 900; // Добавляем элемент TreeView в качестве своеобразного меню treeView1 = new TreeView(); treeView1.BackColor = Color.BurlyWood; treeView1.Dock = DockStyle.Left; treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(treeView1_AfterSelect);
TreeNode tn = new TreeNode(" Элементы" ); tn.Expand();
tn.Nodes.Add(new TreeNode(" [Очистить]" )); tn.Nodes.Add(new TreeNode(" Label" )); tn.Nodes.Add(new TreeNode(" Button" )); tn.Nodes.Add(new TreeNode(" CheckBox" )); tn.Nodes.Add(new TreeNode(" RadioButton" )); tn.Nodes.Add(new TreeNode(" ListBox" )); tn.Nodes.Add(new TreeNode(" TextBox" )); tn.Nodes.Add(new TreeNode(" TabControl" )); tn.Nodes.Add(new TreeNode(" MainMenu" )); tn.Nodes.Add(new TreeNode(" ToolBar" )); tn.Nodes.Add(new TreeNode(" PictureBox" )); tn.Nodes.Add(new TreeNode(" RichTextBox" )); treeView1.Nodes.Add(tn); this.Controls.Add(treeView1); // Добавляем панель для размещения остальных элементов управления panel1 = new Panel(); panel1.Dock = DockStyle.Right; panel1.BorderStyle = BorderStyle.Fixed3D; panel1.Width = this.Width - treeView1.Width; this.Controls.Add(panel1); } // Обработчик событий, срабатывающий при выборе одного из узлов дерева // TreeView private void treeView1_AfterSelect (object sender, System.Windows.Forms.TreeViewEventArgs e) { // Выполнение соответствующего действия при выборе любого из узлов if (e.Node.Text == " [Очистить]" ) { // Удаляем с панели все элементы управления panel1.Controls.Clear(); } else if (e.Node.Text == " Button" ) { // Добавляем на панель кнопку Button button1 = new Button(); button1.Text = " Нажми меня! "; button1.Location = new Point(300, 20); button1.Width = 120; button1.Height = 40; button1.Click += new EventHandler(button1_Click); panel1.Controls.Add(button1); } else if (e.Node.Text == " Label" ) { // Добавляем на панель метку Label label1 = new Label(); label1.Text = " Это надпись. Используется для вывода текста на экран! "; label1.Location = new Point(180, 70); label1.Width = 400; label1.Click += new EventHandler(label1_Click); panel1.Controls.Add(label1); } else if (e.Node.Text == " CheckBox" ) { // Добавляем на панель несколько флажков checkBox1 = new CheckBox(); checkBox1.Text = " Я способный! "; checkBox1.Location = new Point(20, 40); checkBox1.Width = 150; checkBox1.CheckedChanged += new EventHandler(CheckBox_CheckedChanged); panel1.Controls.Add(checkBox1);
checkBox2 = new CheckBox(); checkBox2.Text = " Я скромный! "; checkBox2.Location = new Point(20, 80); checkBox2.Width = 150; checkBox2.CheckedChanged += new EventHandler(CheckBox_CheckedChanged); panel1.Controls.Add(checkBox2); } else if (e.Node.Text == " RadioButton" ) { // Добавляем на панель несколько переключателей radioButton1 = new RadioButton(); radioButton1.Text = " Я добрый! "; radioButton1.Location = new Point(20, 120); radioButton1.Width = 150; radioButton1.Height = 30; //radioButton1.Size = new Size(20, 100);
radioButton1.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
panel1.Controls.Add(radioButton1);
radioButton2 = new RadioButton(); radioButton2.Text = " Я трудолюбивый! "; radioButton2.Location = new Point(20, 160); radioButton2.Width = 150; radioButton2.Height = 30; //radioButton2.Size = new Size(20, 100);
radioButton2.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
panel1.Controls.Add(radioButton2); } else if (e.Node.Text == " ListBox" ) { // Добавляем на панель список
listBox1 = new ListBox(); listBox1.Items.Add(" Зеленый" ); listBox1.Items.Add(" Желтый" ); listBox1.Items.Add(" Голубой" ); listBox1.Items.Add(" Серый" );
listBox1.Location = new Point(20, 250); listBox1.Width = 100; listBox1.Height = 100; listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
panel1.Controls.Add(listBox1); } else if (e.Node.Text == " TextBox" ) { // Добавляем на панель текстовое поле
TextBox textBox1 = new TextBox(); textBox1.Multiline = true; textBox1.Text = " Это текстовое окно. Сюда можно вводить текст! " + " \r\n" + " Сотрите этот текст и введите свой! "; textBox1.Location = new Point(180, 100); textBox1.Width = 400; textBox1.Height = 40;
panel1.Controls.Add(textBox1); } else if (e.Node.Text == " TabControl" ) { // Добавляем на панель элемент управления вкладками // и наполняем каждую вкладку содержимым
TabControl tabControl1 = new TabControl(); tabControl1.Location = new Point(190, 150); tabControl1.Size = new Size(300, 300);
TabPage tabPage1 = new TabPage(" Флокс" ); PictureBox pictureBox1 = new PictureBox(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = new Bitmap(" IMG_4974.jpg" );
pictureBox1.Size = new Size(300, 200); tabPage1.Controls.Add(pictureBox1); Label labelV = new Label(); labelV.Top = 200; labelV.Size = new Size(300, 50); labelV.Text = " Это флокс! "; tabPage1.Controls.Add(labelV); tabControl1.TabPages.Add(tabPage1);
TabPage tabPage2 = new TabPage(" Лилия" ); PictureBox pictureBox2 = new PictureBox(); pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox2.Image = new Bitmap(" IMG_5151.jpg" ); pictureBox2.Size = new Size(300, 200); tabPage2.Controls.Add(pictureBox2); Label labelС = new Label(); labelС.Top = 200; labelС.Size = new Size(300, 50); labelС.Text = " Это лилия! "; tabPage2.Controls.Add(labelС); tabControl1.TabPages.Add(tabPage2);
TabPage tabPage3 = new TabPage(" Георгин" ); PictureBox pictureBox3 = new PictureBox(); pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox3.Image = new Bitmap(" IMG_5158.jpg" ); pictureBox3.Size = new Size(300, 200); tabPage3.Controls.Add(pictureBox3); Label labelT = new Label(); labelT.Top = 200; labelT.Size = new Size(300, 50); labelT.Text = " Это георгин! "; tabPage3.Controls.Add(labelT); tabControl1.TabPages.Add(tabPage3);
panel1.Controls.Add(tabControl1); } else if (e.Node.Text == " PictureBox" ) { // Добавляем на панель изображение
PictureBox pictureBox1 = new PictureBox(); pictureBox1.Image = new Bitmap(" P1000602.jpg" ); pictureBox1.BorderStyle = BorderStyle.Fixed3D; pictureBox1.Location = new Point(500, 250); pictureBox1.Size = new Size(250, 200);
panel1.Controls.Add(pictureBox1); } else if (e.Node.Text == " RichTextBox" ) { // Добавляем поле для ввода текста с форматированием // Загружаем в него данные из текстового файла RichTextBox richTextBox1 = new RichTextBox(); richTextBox1.WordWrap = false; richTextBox1.BorderStyle = BorderStyle.Fixed3D; richTextBox1.BackColor = Color.Beige; richTextBox1.Size = new Size(250, 150); richTextBox1.Location = new Point(300, 500); // panel1.Height - richTextBox1.Height - 5);
panel1.Controls.Add(richTextBox1); StreamReader qwe = new StreamReader(" 111.txt" );
richTextBox1.Text = qwe.ReadToEnd(); } else if (e.Node.Text == " MainMenu" ) { // Добавляем классическое " меню" (появляется в верхней части окна) MainMenu mainMenu1 = new MainMenu();
MenuItem menuItem1 = new MenuItem(" File" ); menuItem1.MenuItems.Add(" Exit", new EventHandler(mainMenu1_Exit_Select)); mainMenu1.MenuItems.Add(menuItem1);
MenuItem menuItem2 = new MenuItem(" Background" ); menuItem2.MenuItems.Add(" Choose", new EventHandler(mainMenu1_ColorOwn_Select)); menuItem2.MenuItems.Add(" White", new EventHandler(mainMenu1_ColorWhite_Select)); mainMenu1.MenuItems.Add(menuItem2);
this.Menu = mainMenu1;
MessageBox.Show(" Главное меню добавлено в окно " + " Испытайте его после нажатия OK." ); } else if (e.Node.Text == " ToolBar" ) { //нет рисунков // Добавляем на панель элемент " панель управления" с кнопками // быстрого вызова ToolBar toolBar1 = new ToolBar(); toolBar1.Size = new Size(100, 100); toolBar1.Dock = DockStyle.Right; ImageList imageList1 = new ImageList(); imageList1.Images.Add(new Bitmap(" лилия.jpg" )); imageList1.Images.Add(new Bitmap(" ирис.jpg" )); imageList1.Images.Add(new Bitmap(" календула.jpg" )); toolBar1.ImageList = imageList1;
ToolBarButton toolBarbutton1 = new ToolBarButton(" New" ); toolBarbutton1.ImageIndex = 0; toolBar1.Buttons.Add(toolBarbutton1);
ToolBarButton toolBarbutton2 = new ToolBarButton(" Open" ); toolBarbutton2.ImageIndex = 1; toolBar1.Buttons.Add(toolBarbutton2);
ToolBarButton toolBarButton3 = new ToolBarButton(" Copy" ); toolBarButton3.ImageIndex = 2; toolBar1.Buttons.Add(toolBarButton3); toolBar1.ButtonClick += new ToolBarButtonClickEventHandler(toolBar1_Click); panel1.Controls.Add(toolBar1);
} } /* Обработчики событий для добавленных выше элементов управления */ // Обработчик события, срабатывающий при щелчке мышью на метке void label1_Click(object sender, System.EventArgs e) { MessageBox.Show (" Да, у меток тоже есть событие Click. Но для них включение событий редкость." ); } // Обработчик события, срабатывающий при нажатии кнопки void button1_Click(object sender, System.EventArgs e) { MessageBox.Show(" Пора, наконец-то вы нажали меня! " ); } // Обработчик события, срабатывающий при установке или снятии флажка void CheckBox_CheckedChanged(object sender, System.EventArgs e) { if (checkBox1.Checked & & checkBox2.Checked) { MessageBox.Show(" У Вас все получится! " ); } else if (checkBox1.Checked) { MessageBox.Show(" Не здорово быть умным и не скромным! " ); } else if (checkBox2.Checked) { MessageBox.Show(" Скромность украшает. Хорошо бы еще быть умным! " ); } else { MessageBox.Show(" Ни скромности, ни таланта? " ); } } // Обработчик события, срабатывающий при нажатии переключателя void RadioButton_CheckedChanged(object sender, System.EventArgs e) { if (radioButton1.Checked) { MessageBox.Show(" Доброту все любят! " ); } else if (radioButton2.Checked) { MessageBox.Show(" Это замечательно! " ); } } // Обработчик события, срабатывающий при выборе одного из пунктов списка void listBox1_SelectedIndexChanged(object sender, System.EventArgs e) { switch (listBox1.SelectedItem.ToString()) { case (" Зеленый" ): treeView1.BackColor = Color.Green; break; case (" Желтый" ): treeView1.BackColor = Color.Yellow; break; case (" Голубой" ): treeView1.BackColor = Color.Blue; break; case (" Серый" ): treeView1.BackColor = Color.Gray; break; } }
// Обработчик события, срабатывающий при выборе в меню пункта " White" void mainMenu1_ColorWhite_Select(object sender, System.EventArgs e) { treeView1.BackColor = Color.White; }
// Обработчик события, срабатывающий при выборе в меню цвета void mainMenu1_ColorOwn_Select(object sender, System.EventArgs e) { ColorDialog colorDialog1 = new ColorDialog(); colorDialog1.Color = treeView1.BackColor; colorDialog1.ShowDialog(); treeView1.BackColor = colorDialog1.Color; }
// Обработчик события, срабатывающий при выборе в меню пункта " exit" void mainMenu1_Exit_Select(object sender, System.EventArgs e) { if ( MessageBox.Show(" Вы уверены, что хотите закончить работу? ", " Exit confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes ) { this.Dispose(); } }
// Обработчик события, срабатывающий при нажатии кнопки на панели инструментов void toolBar1_Click (object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { if (e.Button.Text == " Open" ) { MessageBox.Show(" Здесь мог бы открываться файл! " ); } else if (e.Button.Text == " New" ) { MessageBox.Show(" Здесь мог бы создаваться файл! " ); } else if (e.Button.Text == " Copy" ) { MessageBox.Show(" Здесь мог бы копироваться файл! " ); } } static void Main() { // // Создаем и запускаем форму Application.Run(new FormWithManyControls()); } } Задание Создать приложение для работы с компонентами методом копирования текста программы. Протестировать приложение.
Как сказано выше, при создании приложения из проекта удаляется компонент – форма. Переработать программу таким образом, чтобы не надо было удалять из проекта форму.
Изменить приложение таким образом, чтобы элементы создавались визуальным способом, а не программно (можно использовать не все элементы).
Теоретический материал ADO.NET. Доступ к данным
Предполагается, что к моменту написания приложения соответствующая база данных уже создана. Объектная модель ADO.NET реализует отсоединенный доступ к данным. При этом в Visual Studio.NET существует множество ВСТРОЕННЫХ мастеров и дизайнеров, которые позволяют реализовать механизмы доступа к БД еще на этапе разработки программного кода. С другой стороны, задача получения доступа к данным может быть решена непосредственно во время выполнения приложения. Концепция доступа к данным в ADO.NET основана на использовании двух компонентов: • НАБОРА ДАННЫХ (представляется объектом класса DataSet) со стороны клиента. Это локальное временное хранилище данных; • ПРОВАЙДЕРА ДАННЫХ (представляется объектом класса DataProvider). Это посредник, обеспечивающий взаимодействие приложения и базы данных со стороны базы данных (в распределенных приложениях – со стороны сервера).
ADO.NET. Объектная модель
Объектная модель ADO.NET предполагает существование (при написании приложения для работы с базой данных — использование) двух множеств классов, выполняющих четко определенные задачи при работе с базой данных:
Классы подсоединенных объектов обеспечивают установление соединения с базой данных и управление базой со стороны приложения; классы отсоединенных объектов обеспечивают сохранение, использование и преобразование полученной от базы данных информации на стороне приложения.
DataSet В рамках отсоединенной модели ADO.NET объект DataSet становится важным элементом технологии отсоединенного доступа. Объект-представитель DataSet ПРЕДСТАВЛЯЕТ МНОЖЕСТВО ТАБЛИЦ. Для успешного решения задачи представления в DataSet'е есть все необходимое. Его функциональные возможности позволяют загрузить в локальное хранилище на стороне приложения данные из любого допустимого для ADO.NET источника: SQL Server, Microsoft Access, XML-файл. В числе данных – членов этого класса имеется набор Tables. Объект DataSet может содержать таблицы, количество которых ограничивается лишь возможностями набора Tables. Для каждой таблицы – элемента набора Tables может быть (и, естественно, должна быть) определена структура таблицы. В случае, когда приложение взаимодействует с реальной базой данных, структура таблиц в DataSet'е должна соответствовать структуре таблиц в базе данных. DataSet – это находящийся в памяти объект ADO.NET, используемый в приложении для представления данных; он определяет согласованную реляционную модель базы данных, которая не зависит от источника содержащихся в нем данных. Степень полноты модели определяется задачами, которые решает приложение. Объект DataSet может представлять абсолютно точную модель базы данных, и в таком случае эта модель должна будет включать полный набор структурных элементов базы данных, включая таблицы, содержащие данные, с учетом установленных ограничений и отношений между таблицами. Содержащуюся в объекте DataSet информацию можно изменять независимо от источника данных (от самой БД). Соответствующие значения формируются непосредственно в программе и добавляются в таблицы. При работе с базой данных данные могут собираться из разных таблиц, локальное представление которых обеспечивается различными объектами – представителями классов DataSet. В классе DataSetопределено множество перегруженных методов Merge, которые позволяют объединять содержимое нескольких объектов DataSet. Любой объект-представитель класса DataSet позволяет организовать чтение и запись содержимого (теоретически – информации из базы) в файл или область памяти. При этом можно читать и сохранять: • только содержимое объекта (собственно информацию из базы); • только структуру объекта – представителя класса DataSet; • полный образ DataSet (содержимое и структуру). Таким образом, DataSet является основой для построения различных вариантов отсоединенных объектов – хранилищ информации. Класс DataSet – класс не абстрактный и не интерфейс. Это значит, что существует множество вариантов построения отсоединенных хранилищ. На основе базового класса DataSet можно определять производные классы определенной конфигурации, которая соответствует структуре базы данных. Можно также создать объект – представитель класса DataSet оригинальной конфигурации и добавить непосредственно к этому объекту все необходимые составляющие в виде таблиц (объектов – представителей класса Table) соответствующей структуры и множества отношений Relation. Объект – представитель класса DataSet и сам по себе, без сопутствующего окружения, представляет определенную ценность. Дело в том, что информация, представляемая в приложении в виде таблиц, НЕ ОБЯЗЯТЕЛЬНО должна иметь внешний источник в виде реальной базы данных. Ничто не мешает программисту обеспечить в приложении чтение обычного " плоского" файла или даже " накопить" необходимую информацию посредством интерактивного взаимодействия с пользователем, используя при этом обычный диалог. В конце концов, база данных – это один из возможных способов ОРГАНИЗАЦИИ информации (а не только ее хранения! ). Не случайно DataSet представляет ОТСОЕДИНЕННЫЕ данные. На DataSet работают все ранее перечисленные элементы ADO.NET. В свою очередь, в приложении, обеспечивающем взаимодействие с базой данных, объект DataSet функционирует исключительно за счет объекта DataAdapter, который обслуживает DataSet. При этом DataAdapter является центральным компонентом архитектуры отсоединенного доступа. Пример Создадим базу данных planets.mdb (в формате ACCESS 2003). Структура таблицы PLANET: Заполним таблицу данными
Создадим проект в Visual Studio 2012 C#. Разместим на форме компонент DataGridView: Нажмем на черную стрелочку в правом верхнем углу компонента DataGridView. Появится окно настройки источника данных:
Выберем нашу базу и таблицу PLANET.
Проверить подключение.
ОК, ОК.
Выбрать таблицу PLANET.
На форме появились элементы для связи с базой данных и таблицей.
Построим решение
Запустим проект на выполнение:
Протестируем полученное приложение. В базе данных не сохраняются внесенные изменения (вставка, удаление, корректировка). Можно проделать следующий эксперимент: установить на форме компонент BidingNavigator.
Результат будет такой же – изменения не сохраняются в базе данных.
Задание
Создать базу данных ACCESS согласно своему варианту задания.
Создать приложение для демонстрации подключения базы данных ACCESS в Visual Studio 2012 C#. Протестировать приложение.
Теоретический материал ADO.NET. Доступ к данным
Предполагается, что к моменту написания приложения соответствующая база данных уже создана. Объектная модель ADO.NET реализует отсоединенный доступ к данным. При этом в Visual Studio.NET существует множество ВСТРОЕННЫХ мастеров и дизайнеров, которые позволяют реализовать механизмы доступа к БД еще на этапе разработки программного кода. С другой стороны, задача получения доступа к данным может быть решена непосредственно во время выполнения приложения. Концепция доступа к данным в ADO.NET основана на использовании двух компонентов: • НАБОРА ДАННЫХ (представляется объектом класса DataSet) со стороны клиента. Это локальное временное хранилище данных; • ПРОВАЙДЕРА ДАННЫХ (представляется объектом класса DataProvider). Это посредник, обеспечивающий взаимодействие приложения и базы данных со стороны базы данных (в распределенных приложениях – со стороны сервера).
ADO.NET. Объектная модель
Объектная модель ADO.NET предполагает существование (при написании приложения для работы с базой данных — использование) двух множеств классов, выполняющих четко определенные задачи при работе с базой данных:
Классы подсоединенных объектов обеспечивают установление соединения с базой данных и управление базой со стороны приложения; классы отсоединенных объектов обеспечивают сохранение, использование и преобразование полученной от базы данных информации на стороне приложения.
DataSet Популярное:
|
Последнее изменение этой страницы: 2016-03-15; Просмотров: 4618; Нарушение авторского права страницы