Темы лекции: ADO.NET, Office Interop.
Практическое задание: ADO.NET, Office Interop.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 12
http://www.slideshare.net/IgorShkulipa 2
Адаптер
Паттерн Adapter, представляет собой программную обертку над
существующими классами, преобразуя их интерфейсы к виду,
пригодному для последующего использования.
Пусть класс, интерфейс которого нужно адаптировать к нужному
виду, имеет имя Adaptee. Для решения задачи преобразования
его интерфейса паттерн Adapter вводит следующую иерархию
классов:
◦ Виртуальный базовый класс Target. Здесь объявляется
пользовательский интерфейс подходящего вида. Только этот
интерфейс доступен для пользователя.
◦ Производный класс Adapter, реализующий интерфейс Target.
В этом классе также имеется указатель или ссылка на
экземпляр Adaptee. Паттерн Adapter использует этот
указатель для перенаправления клиентских вызовов в
Adaptee. Так как интерфейсы Adaptee и Target несовместимы
между собой, то эти вызовы обычно требуют
преобразования.
http://www.slideshare.net/IgorShkulipa 3
Пример. Преобразование строки в структуру
class InputStringFullName
{
public string Text { get; set; }
public InputStringFullName()
{
Text = "";
}
public void Input()
{
Console.Write
("Input Full Name (Surname Name MiddleName): ");
Text = Console.ReadLine();
}
}
http://www.slideshare.net/IgorShkulipa 4
Класс структуры
class FullName
{
public string Name { get; set; }
public string Surname { get; set; }
public string Middle { get; set; }
public FullName(string surname, string name, string middle)
{
Name = name; Surname = surname; Middle = middle;
}
public void Print()
{
Console.WriteLine(Name);
Console.WriteLine(Middle);
Console.WriteLine(Surname);
}
}
http://www.slideshare.net/IgorShkulipa 5
Класс-адаптер
class FullNameAdapter : InputStringFullName
{
public FullNameAdapter(InputStringFullName stringFullName)
{
Text = stringFullName.Text;
}
public FullName GetFullName()
{
int iFirstSpace = Text.IndexOf(' ');
string strSurname = Text.Substring(0, iFirstSpace);
int iSecondSpace =
Text.Substring(iFirstSpace + 1).IndexOf(' ') + iFirstSpace + 1;
string strName =
Text.Substring(iFirstSpace, iSecondSpace - iFirstSpace);
string strMiddle = Text.Substring(iSecondSpace);
return new FullName(strSurname, strName, strMiddle);
}
}
http://www.slideshare.net/IgorShkulipa 6
Использование адаптера
class Program
{
static void Main(string[] args)
{
InputStringFullName isfn = new InputStringFullName();
isfn.Input();
FullNameAdapter fna = new FullNameAdapter(isfn);
FullName fn = fna.GetFullName();
fn.Print();
Console.ReadKey();
}
}
Результат:
Input Full Name (Surname Name MiddleName): Ivanov Ivan Ivanovich
Ivan
Ivanovich
Ivanov
http://www.slideshare.net/IgorShkulipa 7
Команда
Паттерн Command преобразовывает запрос на выполнение
действия в отдельный объект-команду. Такая инкапсуляция
позволяет передавать эти действия другим функциям и
объектам в качестве параметра, приказывая им выполнить
запрошенную операцию. Команда – это объект, поэтому над
ней допустимы любые операции, что и над объектом.
Команда используется, если:
◦ Система управляется событиями. При появлении такого
события (запроса) необходимо выполнить определенную
последовательность действий.
◦ Необходимо параметризировать объекты выполняемым
действием, ставить запросы в очередь или поддерживать
операции отмены и повтора действий.
◦ Нужен объектно-ориентированный аналог функции
обратного вызова в процедурном программировании.
http://www.slideshare.net/IgorShkulipa 8
Пример. Интерфейс «Игра»
public interface IGame
{
void New();
void Start();
void Pause();
void Resume();
void Finish();
void Break();
void BreakAndFinish();
void BreakAndStart();
}
http://www.slideshare.net/IgorShkulipa 9
Реализация интерфейса
public class SomeGame : Igame {
void IGame.New() {
Console.WriteLine("New Game."); }
void IGame.Start() {
Console.WriteLine("Game Started."); }
void IGame.Pause() {
Console.WriteLine("Game Paused."); }
void IGame.Resume() {
Console.WriteLine("Game Resumed."); }
void IGame.Finish() {
Console.WriteLine("Game Finished."); }
void IGame.Break() {
Console.WriteLine("Game Breaked."); }
void IGame.BreakAndFinish() {
Console.WriteLine("Game Breaked.");
Console.WriteLine("Game Finished."); }
void IGame.BreakAndStart() {
Console.WriteLine("Game Breaked.");
Console.WriteLine("New Game.");
Console.WriteLine("Game Started."); }
}
http://www.slideshare.net/IgorShkulipa 10
Классы команд
public class Icommand {
public ICommand(IGame game) { Game = game; }
public virtual void ExecuteCommand() { }
public IGame Game { get; set; }
}
class NewCommand : Icommand {
public NewCommand(IGame game) : base(game) { }
public override void ExecuteCommand()
{
Console.WriteLine("Executing New Command...");
Game.New();
}
}
class StartCommand : Icommand {
public StartCommand(IGame game) : base(game) { }
public override void ExecuteCommand()
{
Console.WriteLine("Executing Start Command...");
Game.Start();
}
}
http://www.slideshare.net/IgorShkulipa 11
Классы команд
class PauseCommand : ICommand{
public PauseCommand(IGame game) : base(game) { }
public override void ExecuteCommand() {
Console.WriteLine("Executing Pause Command...");
Game.Pause();
}
}
class ResumeCommand : ICommand{
public ResumeCommand(IGame game) : base(game) { }
public override void ExecuteCommand() {
Console.WriteLine("Executing Resume Command...");
Game.Resume();
}
}
class FinishCommand : ICommand{
public FinishCommand(IGame game) : base(game) { }
public override void ExecuteCommand() {
Console.WriteLine("Executing Finish Command...");
Game.Finish();
}
}
http://www.slideshare.net/IgorShkulipa 12
Классы команд
class BreakCommand : ICommand{
public BreakCommand(IGame game) : base(game) { }
public override void ExecuteCommand() {
Console.WriteLine("Executing Break Command...");
Game.Break();
}
}
class BreakAndFinishCommand : ICommand{
public BreakAndFinishCommand(IGame game) : base(game) { }
public override void ExecuteCommand() {
Console.WriteLine("Executing Break And Finish Command...");
Game.BreakAndFinish();
}
}
class BreakAndStartCommand : ICommand{
public BreakAndStartCommand(IGame game) : base(game) { }
public override void ExecuteCommand() {
Console.WriteLine("Executing Break And Start Command...");
Game.BreakAndStart();
}
}
http://www.slideshare.net/IgorShkulipa 13
Использование команд
class Program
{
static void Main(string[] args)
{
IGame someGame = new SomeGame();
ICommand[] commands = new ICommand[10];
commands[0] = new NewCommand(someGame);
commands[1] = new StartCommand(someGame);
commands[2] = new BreakCommand(someGame);
commands[3] = new NewCommand(someGame);
commands[4] = new StartCommand(someGame);
commands[5] = new BreakAndStartCommand(someGame);
commands[6] = new PauseCommand(someGame);
commands[7] = new ResumeCommand(someGame);
commands[8] = new PauseCommand(someGame);
commands[9] = new BreakAndFinishCommand(someGame);
for (int i = 0; i < 10; i++)
{
commands[i].ExecuteCommand();
}
Console.ReadKey();
}
}
Результат:
Executing New Command...
New Game.
Executing Start Command...
Game Started.
Executing Break Command...
Game Breaked.
Executing New Command...
New Game.
Executing Start Command...
Game Started.
Executing Break And Start Command...
Game Breaked.
New Game.
Game Started.
Executing Pause Command...
Game Paused.
Executing Resume Command...
Game Resumed.
Executing Pause Command...
Game Paused.
Executing Break And Finish Command...
Game Breaked.
Game Finished.
http://www.slideshare.net/IgorShkulipa 14
ADO.NET
ADO.NET — это набор классов, предоставляющих службы доступа к данным
программисту, работающему на платформе .NET Framework. ADO.NET имеет
богатый набор компонентов для создания распределенных приложений,
совместно использующих данные. Это неотъемлемая часть платформы .NET
Framework, которая предоставляет доступ к реляционным данным, XML-
данным и данным приложений.
ADO.NET разделят доступ к данным и обработку данных на дискретные
компоненты, которые могут использоваться отдельно или совместно.
ADO.NET включает поставщиков данных .NET Framework для соединения с
базой данных, выполнения команд и получения результатов.
Эти результаты, помещенные в объект ADO.NET DataSet, обрабатываются
непосредственно, чтобы они могли быть предоставлены пользователю
нерегламентированным образом, объединенные с данными из многих
источников или передаваемые между уровнями.
Объект DataSet также может независимо использоваться поставщиком данных
.NET Framework для управления локальными для приложения данными или
данными, источником которых является XML.
Классы ADO.NET имеются в System.Data.dll и интегрируются с классами XML,
имеющимися в System.Xml.dll.
http://www.slideshare.net/IgorShkulipa 15
Архитектура ADO.NET
Поставщиками данных .NET Framework являются компоненты, которые
специально сконструированы для обработки данных и быстрого,
однопроходного доступа к данным только для чтения.
http://www.slideshare.net/IgorShkulipa 16
Классы ADO.NET
• Connection обеспечивает обмен данными с источником данных.
• Command позволяет обращаться к командам базы данных для
возврата данных, изменения данных, выполнения хранимых процедур
и передачи или получения сведений о параметрах.
• DataReader обеспечивает высокопроизводительный поток данных из
источника данных.
• DataAdapter предоставляет мост между объектом DataSet и
источником данных. DataAdapter использует объекты Command для
выполнения команд SQL на источнике данных для загрузки DataSet с
данными и согласования изменений данных, выполненных в DataSet,
вновь с источником данных.
• Класс DataSet в ADO.NET специально сконструирован для доступа к
данным независимо от источника данных. Поэтому он может быть
использован со многими и разными источниками данных, с XML-
данными или для управления данными, локальными для приложения.
DataSet содержит коллекцию одного или нескольких объектов
DataTable, состоящих из строк и столбцов данных, а также
первичный ключ, внешний ключ, ограничение и связанные сведения о
данных в объектах DataTable.
http://www.slideshare.net/IgorShkulipa 17
Установка соединения
• Для подключения к Microsoft SQL Server используется объект
SqlConnection поставщика данных .NET Framework для SQL Server.
• Для подключения к источнику данных OLE DB используется объект
OleDbConnection поставщика данных .NET Framework для OLE DB.
• Для соединения с источником данных используется объект
OdbcConnection поставщика данных .NET Framework для ODBC.
• Для соединения с источником данных Oracle используется объект
OracleConnection поставщика данных .NET Framework для Oracle.
using System.Data.OleDb;
public sealed class OleDbConnection : DbConnection,
ICloneable, IDbConnection, Idisposable
Представляет открытое подключение к источнику данных.
http://www.slideshare.net/IgorShkulipa 18
Пример соединения
Используется база данных MS Access 2007-2013
OleDbConnection connection =
new OleDbConnection(
"Provider=Microsoft.Ace.OLEDB.12.0;" +
"Data Source=ADODatabase.accdb");
connection.Open();
connection.Close();
http://www.slideshare.net/IgorShkulipa 19
Получение данных с помощью DataReader
Для извлечения данных с помощью DataReader необходимо создать
экземпляр объекта Command, а затем создать объект DataReader,
вызвав метод Command.ExecuteReader для получения строк из
источника данных.
Метод Read объекта DataReader используется для получения строки из
результатов запроса. Доступ к отдельным столбцам возвращенной
строки осуществляется по имени или порядковому номеру столбца
через объект DataReader. Однако для максимальной
производительности объект DataReader предоставляет ряд методов,
позволяющих обращаться к значениям столбцов в их собственных
типах данных (GetDateTime, GetDouble, GetGuid, GetInt32 и т. д.).
Ссылка на полное описание класса SqlDataReader
http://www.slideshare.net/IgorShkulipa 20
Пример DataReader
OleDbConnection connection =
new OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0;" +
"Data Source=ADODatabase.accdb");
connection.Open();
OleDbCommand command =
new OleDbCommand("SELECT * FROM t_users;", connection);
OleDbDataReader dataReader = command.ExecuteReader();
while (dataReader.Read())
{
userListBox.Items.Add(dataReader.GetValue(1).ToString());
}
dataReader.Close();
connection.Close();
http://www.slideshare.net/IgorShkulipa 21
DataAdapter и DataSet
Набор данных ADO.NET DataSet является находящимся в памяти
представлением данных, предоставляющим согласованную реляционную
программную модель, независимую от источника данных. Набор данных
DataSet представляет собой полную совокупность данных, которая включает
таблицы, ограничения и связи между таблицами. Набор данных DataSet
является независимым от источника данных, поэтому DataSet может
включать данные, локальные по отношению к приложению, а также данные
из нескольких источников данных. Управление взаимодействием с
существующими источниками данных осуществляется с помощью
DataAdapter.
Свойство SelectCommand объекта DataAdapter представляет собой объект
Command, получающий данные из источника данных. Свойства
InsertCommand, UpdateCommand и DeleteCommand, принадлежащие
DataAdapter, являются объектами Command, которые управляют
обновлением данных в источнике данных в соответствии с изменениями
данных в DataSet.
Метод Fill объекта DataAdapter служит для заполнения набора данных DataSet
результатами выполнения метода SelectCommand объекта DataAdapter.
Метод Fill принимает в качестве аргумента подлежащий заполнению набор
данных DataSet, а также объект DataTable или имя объекта DataTable,
который должен быть заполнен строками, возвращенными методом
SelectCommand.
http://www.slideshare.net/IgorShkulipa 22
Пример
OleDbConnection connection =
new OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0;" +
"Data Source=ADODatabase.accdb");
connection.Open();
string selectString = "SELECT * FROM t_users";
OleDbDataAdapter dataAdapter =
new OleDbDataAdapter(selectString, connection);
DataSet result = new DataSet();
dataAdapter.Fill(result);
if (result.Tables.Count > 0)
{
for (int i = 0; i < result.Tables[0].Rows.Count; i++)
{
userListBox.Items.Add(result.Tables[0].Rows[i][1]);
}
}
connection.Close();
http://www.slideshare.net/IgorShkulipa 23
Command
public sealed class OleDbCommand : DbCommand,
ICloneable, IDbCommand, Idisposable
Представляет оператор SQL или хранимую процедуру, применяемую к
источнику данных.
OleDbCommand содержит следующие методы для выполнения команд над
источником данных:
ExecuteReader Выполняет команды, возвращающие строки.
ExecuteNonQuery
Выполняет команды, таки как операторы SQL
INSERT, DELETE, UPDATE и SET.
ExecuteScalar
Извлекает одно значение из базы данных
(например, составное значение).
http://www.slideshare.net/IgorShkulipa 24
Добавление записей
string selectMaxID= "SELECT MAX(u_id) FROM t_users;";
OleDbDataAdapter dataAdapter =
new OleDbDataAdapter(selectMaxID, connection);
DataSet result = new DataSet();
dataAdapter.Fill(result);
int maxID = Convert.ToInt32(result.Tables[0].Rows[0][0].ToString());
string insertString =
"INSERT INTO t_users(u_id, u_name, u_password) VALUES ("+
(maxID+1).ToString() +
",'" + userBox.Text + "','" + passwordBox.Password + "');";
OleDbCommand insertCommand = new OleDbCommand(insertString, connection);
insertCommand.ExecuteNonQuery();
http://www.slideshare.net/IgorShkulipa 25
Работа с Microsoft Office
Корпорация Майкрософт предлагает несколько основных сборок
взаимодействия (primary interop assembly, PIA), в которых содержится
официальное описание наиболее часто используемых библиотек
Microsoft Office XP. Microsoft Office XP PIA облегчают взаимодействие
между управляемым кодом и СОМ-библиотеками Office XP.
• Microsoft.Office.Interop.Access.dll
• Microsoft.Office.Interop.Excel.dll
• Microsoft.Office.Interop.FrontPage.dll
• Microsoft.Office.Interop.FrontPageEditor.dll
• Microsoft.Office.Interop.Graph.dll
• Microsoft.Office.Interop.Outlook.dll
• Microsoft.Office.Interop.OutlookViewCtl.dll
• Microsoft.Office.Interop.Owc.dll
• Microsoft.Office.Interop.PowerPoint.dll
• Microsoft.Office.Interop.Publisher.dll
• Microsoft.Office.Interop.SmartTag.dll
• Microsoft.Office.Interop.Visio.dll
• Microsoft.Office.Interop.Word.dll
http://www.slideshare.net/IgorShkulipa 26
Добавление ссылки на библиотеку
http://www.slideshare.net/IgorShkulipa 27
Экспорт в Excel
using MOIE = Microsoft.Office.Interop.Excel;
...
MOIE.Application excel=new MOIE.Application();
excel.Visible = true;
excel.SheetsInNewWorkbook = 10;
excel.Workbooks.Add(Type.Missing);
MOIE.Workbook workBook = excel.Workbooks[1];
MOIE.Worksheet workSheet = workBook.Sheets[1];
for (int i = 0; i < userListBox.Items.Count; i++)
{
MOIE.Range range =
workSheet.get_Range("A" + (i+1).ToString(), Type.Missing).Cells;
range.Value2 = userListBox.Items[i].ToString();
if ((i % 2) == 0)
{
range.Font.Bold = true;
}
}
workBook.SaveAs("result.xlsx");
excel.Quit();
http://www.slideshare.net/IgorShkulipa 28
Лабораторная работа №12. ADO.NET и Office Interop
Спроектировать базу данных для хранения информации о документах на
диске (имя, путь, дата создания, формат…), а так же для хранения
информации о ключевых словах и тематике документа.
Создать приложение для индексации (создания списка ключевых слов и
определения тематики) текстовых файлов (*.txt) и документов MS
Office (*.xls, *.xlsx, *.doc, *.docx, *.ppt, *.pptx) и записи результатов в
базу данных.
Реализовать хранение/чтение/редактирование информации о документах.

C# Desktop. Занятие 12.

  • 1.
    Темы лекции: ADO.NET,Office Interop. Практическое задание: ADO.NET, Office Interop. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 12
  • 2.
    http://www.slideshare.net/IgorShkulipa 2 Адаптер Паттерн Adapter,представляет собой программную обертку над существующими классами, преобразуя их интерфейсы к виду, пригодному для последующего использования. Пусть класс, интерфейс которого нужно адаптировать к нужному виду, имеет имя Adaptee. Для решения задачи преобразования его интерфейса паттерн Adapter вводит следующую иерархию классов: ◦ Виртуальный базовый класс Target. Здесь объявляется пользовательский интерфейс подходящего вида. Только этот интерфейс доступен для пользователя. ◦ Производный класс Adapter, реализующий интерфейс Target. В этом классе также имеется указатель или ссылка на экземпляр Adaptee. Паттерн Adapter использует этот указатель для перенаправления клиентских вызовов в Adaptee. Так как интерфейсы Adaptee и Target несовместимы между собой, то эти вызовы обычно требуют преобразования.
  • 3.
    http://www.slideshare.net/IgorShkulipa 3 Пример. Преобразованиестроки в структуру class InputStringFullName { public string Text { get; set; } public InputStringFullName() { Text = ""; } public void Input() { Console.Write ("Input Full Name (Surname Name MiddleName): "); Text = Console.ReadLine(); } }
  • 4.
    http://www.slideshare.net/IgorShkulipa 4 Класс структуры classFullName { public string Name { get; set; } public string Surname { get; set; } public string Middle { get; set; } public FullName(string surname, string name, string middle) { Name = name; Surname = surname; Middle = middle; } public void Print() { Console.WriteLine(Name); Console.WriteLine(Middle); Console.WriteLine(Surname); } }
  • 5.
    http://www.slideshare.net/IgorShkulipa 5 Класс-адаптер class FullNameAdapter: InputStringFullName { public FullNameAdapter(InputStringFullName stringFullName) { Text = stringFullName.Text; } public FullName GetFullName() { int iFirstSpace = Text.IndexOf(' '); string strSurname = Text.Substring(0, iFirstSpace); int iSecondSpace = Text.Substring(iFirstSpace + 1).IndexOf(' ') + iFirstSpace + 1; string strName = Text.Substring(iFirstSpace, iSecondSpace - iFirstSpace); string strMiddle = Text.Substring(iSecondSpace); return new FullName(strSurname, strName, strMiddle); } }
  • 6.
    http://www.slideshare.net/IgorShkulipa 6 Использование адаптера classProgram { static void Main(string[] args) { InputStringFullName isfn = new InputStringFullName(); isfn.Input(); FullNameAdapter fna = new FullNameAdapter(isfn); FullName fn = fna.GetFullName(); fn.Print(); Console.ReadKey(); } } Результат: Input Full Name (Surname Name MiddleName): Ivanov Ivan Ivanovich Ivan Ivanovich Ivanov
  • 7.
    http://www.slideshare.net/IgorShkulipa 7 Команда Паттерн Commandпреобразовывает запрос на выполнение действия в отдельный объект-команду. Такая инкапсуляция позволяет передавать эти действия другим функциям и объектам в качестве параметра, приказывая им выполнить запрошенную операцию. Команда – это объект, поэтому над ней допустимы любые операции, что и над объектом. Команда используется, если: ◦ Система управляется событиями. При появлении такого события (запроса) необходимо выполнить определенную последовательность действий. ◦ Необходимо параметризировать объекты выполняемым действием, ставить запросы в очередь или поддерживать операции отмены и повтора действий. ◦ Нужен объектно-ориентированный аналог функции обратного вызова в процедурном программировании.
  • 8.
    http://www.slideshare.net/IgorShkulipa 8 Пример. Интерфейс«Игра» public interface IGame { void New(); void Start(); void Pause(); void Resume(); void Finish(); void Break(); void BreakAndFinish(); void BreakAndStart(); }
  • 9.
    http://www.slideshare.net/IgorShkulipa 9 Реализация интерфейса publicclass SomeGame : Igame { void IGame.New() { Console.WriteLine("New Game."); } void IGame.Start() { Console.WriteLine("Game Started."); } void IGame.Pause() { Console.WriteLine("Game Paused."); } void IGame.Resume() { Console.WriteLine("Game Resumed."); } void IGame.Finish() { Console.WriteLine("Game Finished."); } void IGame.Break() { Console.WriteLine("Game Breaked."); } void IGame.BreakAndFinish() { Console.WriteLine("Game Breaked."); Console.WriteLine("Game Finished."); } void IGame.BreakAndStart() { Console.WriteLine("Game Breaked."); Console.WriteLine("New Game."); Console.WriteLine("Game Started."); } }
  • 10.
    http://www.slideshare.net/IgorShkulipa 10 Классы команд publicclass Icommand { public ICommand(IGame game) { Game = game; } public virtual void ExecuteCommand() { } public IGame Game { get; set; } } class NewCommand : Icommand { public NewCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing New Command..."); Game.New(); } } class StartCommand : Icommand { public StartCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing Start Command..."); Game.Start(); } }
  • 11.
    http://www.slideshare.net/IgorShkulipa 11 Классы команд classPauseCommand : ICommand{ public PauseCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing Pause Command..."); Game.Pause(); } } class ResumeCommand : ICommand{ public ResumeCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing Resume Command..."); Game.Resume(); } } class FinishCommand : ICommand{ public FinishCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing Finish Command..."); Game.Finish(); } }
  • 12.
    http://www.slideshare.net/IgorShkulipa 12 Классы команд classBreakCommand : ICommand{ public BreakCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing Break Command..."); Game.Break(); } } class BreakAndFinishCommand : ICommand{ public BreakAndFinishCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing Break And Finish Command..."); Game.BreakAndFinish(); } } class BreakAndStartCommand : ICommand{ public BreakAndStartCommand(IGame game) : base(game) { } public override void ExecuteCommand() { Console.WriteLine("Executing Break And Start Command..."); Game.BreakAndStart(); } }
  • 13.
    http://www.slideshare.net/IgorShkulipa 13 Использование команд classProgram { static void Main(string[] args) { IGame someGame = new SomeGame(); ICommand[] commands = new ICommand[10]; commands[0] = new NewCommand(someGame); commands[1] = new StartCommand(someGame); commands[2] = new BreakCommand(someGame); commands[3] = new NewCommand(someGame); commands[4] = new StartCommand(someGame); commands[5] = new BreakAndStartCommand(someGame); commands[6] = new PauseCommand(someGame); commands[7] = new ResumeCommand(someGame); commands[8] = new PauseCommand(someGame); commands[9] = new BreakAndFinishCommand(someGame); for (int i = 0; i < 10; i++) { commands[i].ExecuteCommand(); } Console.ReadKey(); } } Результат: Executing New Command... New Game. Executing Start Command... Game Started. Executing Break Command... Game Breaked. Executing New Command... New Game. Executing Start Command... Game Started. Executing Break And Start Command... Game Breaked. New Game. Game Started. Executing Pause Command... Game Paused. Executing Resume Command... Game Resumed. Executing Pause Command... Game Paused. Executing Break And Finish Command... Game Breaked. Game Finished.
  • 14.
    http://www.slideshare.net/IgorShkulipa 14 ADO.NET ADO.NET —это набор классов, предоставляющих службы доступа к данным программисту, работающему на платформе .NET Framework. ADO.NET имеет богатый набор компонентов для создания распределенных приложений, совместно использующих данные. Это неотъемлемая часть платформы .NET Framework, которая предоставляет доступ к реляционным данным, XML- данным и данным приложений. ADO.NET разделят доступ к данным и обработку данных на дискретные компоненты, которые могут использоваться отдельно или совместно. ADO.NET включает поставщиков данных .NET Framework для соединения с базой данных, выполнения команд и получения результатов. Эти результаты, помещенные в объект ADO.NET DataSet, обрабатываются непосредственно, чтобы они могли быть предоставлены пользователю нерегламентированным образом, объединенные с данными из многих источников или передаваемые между уровнями. Объект DataSet также может независимо использоваться поставщиком данных .NET Framework для управления локальными для приложения данными или данными, источником которых является XML. Классы ADO.NET имеются в System.Data.dll и интегрируются с классами XML, имеющимися в System.Xml.dll.
  • 15.
    http://www.slideshare.net/IgorShkulipa 15 Архитектура ADO.NET Поставщикамиданных .NET Framework являются компоненты, которые специально сконструированы для обработки данных и быстрого, однопроходного доступа к данным только для чтения.
  • 16.
    http://www.slideshare.net/IgorShkulipa 16 Классы ADO.NET •Connection обеспечивает обмен данными с источником данных. • Command позволяет обращаться к командам базы данных для возврата данных, изменения данных, выполнения хранимых процедур и передачи или получения сведений о параметрах. • DataReader обеспечивает высокопроизводительный поток данных из источника данных. • DataAdapter предоставляет мост между объектом DataSet и источником данных. DataAdapter использует объекты Command для выполнения команд SQL на источнике данных для загрузки DataSet с данными и согласования изменений данных, выполненных в DataSet, вновь с источником данных. • Класс DataSet в ADO.NET специально сконструирован для доступа к данным независимо от источника данных. Поэтому он может быть использован со многими и разными источниками данных, с XML- данными или для управления данными, локальными для приложения. DataSet содержит коллекцию одного или нескольких объектов DataTable, состоящих из строк и столбцов данных, а также первичный ключ, внешний ключ, ограничение и связанные сведения о данных в объектах DataTable.
  • 17.
    http://www.slideshare.net/IgorShkulipa 17 Установка соединения •Для подключения к Microsoft SQL Server используется объект SqlConnection поставщика данных .NET Framework для SQL Server. • Для подключения к источнику данных OLE DB используется объект OleDbConnection поставщика данных .NET Framework для OLE DB. • Для соединения с источником данных используется объект OdbcConnection поставщика данных .NET Framework для ODBC. • Для соединения с источником данных Oracle используется объект OracleConnection поставщика данных .NET Framework для Oracle. using System.Data.OleDb; public sealed class OleDbConnection : DbConnection, ICloneable, IDbConnection, Idisposable Представляет открытое подключение к источнику данных.
  • 18.
    http://www.slideshare.net/IgorShkulipa 18 Пример соединения Используетсябаза данных MS Access 2007-2013 OleDbConnection connection = new OleDbConnection( "Provider=Microsoft.Ace.OLEDB.12.0;" + "Data Source=ADODatabase.accdb"); connection.Open(); connection.Close();
  • 19.
    http://www.slideshare.net/IgorShkulipa 19 Получение данныхс помощью DataReader Для извлечения данных с помощью DataReader необходимо создать экземпляр объекта Command, а затем создать объект DataReader, вызвав метод Command.ExecuteReader для получения строк из источника данных. Метод Read объекта DataReader используется для получения строки из результатов запроса. Доступ к отдельным столбцам возвращенной строки осуществляется по имени или порядковому номеру столбца через объект DataReader. Однако для максимальной производительности объект DataReader предоставляет ряд методов, позволяющих обращаться к значениям столбцов в их собственных типах данных (GetDateTime, GetDouble, GetGuid, GetInt32 и т. д.). Ссылка на полное описание класса SqlDataReader
  • 20.
    http://www.slideshare.net/IgorShkulipa 20 Пример DataReader OleDbConnectionconnection = new OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0;" + "Data Source=ADODatabase.accdb"); connection.Open(); OleDbCommand command = new OleDbCommand("SELECT * FROM t_users;", connection); OleDbDataReader dataReader = command.ExecuteReader(); while (dataReader.Read()) { userListBox.Items.Add(dataReader.GetValue(1).ToString()); } dataReader.Close(); connection.Close();
  • 21.
    http://www.slideshare.net/IgorShkulipa 21 DataAdapter иDataSet Набор данных ADO.NET DataSet является находящимся в памяти представлением данных, предоставляющим согласованную реляционную программную модель, независимую от источника данных. Набор данных DataSet представляет собой полную совокупность данных, которая включает таблицы, ограничения и связи между таблицами. Набор данных DataSet является независимым от источника данных, поэтому DataSet может включать данные, локальные по отношению к приложению, а также данные из нескольких источников данных. Управление взаимодействием с существующими источниками данных осуществляется с помощью DataAdapter. Свойство SelectCommand объекта DataAdapter представляет собой объект Command, получающий данные из источника данных. Свойства InsertCommand, UpdateCommand и DeleteCommand, принадлежащие DataAdapter, являются объектами Command, которые управляют обновлением данных в источнике данных в соответствии с изменениями данных в DataSet. Метод Fill объекта DataAdapter служит для заполнения набора данных DataSet результатами выполнения метода SelectCommand объекта DataAdapter. Метод Fill принимает в качестве аргумента подлежащий заполнению набор данных DataSet, а также объект DataTable или имя объекта DataTable, который должен быть заполнен строками, возвращенными методом SelectCommand.
  • 22.
    http://www.slideshare.net/IgorShkulipa 22 Пример OleDbConnection connection= new OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0;" + "Data Source=ADODatabase.accdb"); connection.Open(); string selectString = "SELECT * FROM t_users"; OleDbDataAdapter dataAdapter = new OleDbDataAdapter(selectString, connection); DataSet result = new DataSet(); dataAdapter.Fill(result); if (result.Tables.Count > 0) { for (int i = 0; i < result.Tables[0].Rows.Count; i++) { userListBox.Items.Add(result.Tables[0].Rows[i][1]); } } connection.Close();
  • 23.
    http://www.slideshare.net/IgorShkulipa 23 Command public sealedclass OleDbCommand : DbCommand, ICloneable, IDbCommand, Idisposable Представляет оператор SQL или хранимую процедуру, применяемую к источнику данных. OleDbCommand содержит следующие методы для выполнения команд над источником данных: ExecuteReader Выполняет команды, возвращающие строки. ExecuteNonQuery Выполняет команды, таки как операторы SQL INSERT, DELETE, UPDATE и SET. ExecuteScalar Извлекает одно значение из базы данных (например, составное значение).
  • 24.
    http://www.slideshare.net/IgorShkulipa 24 Добавление записей stringselectMaxID= "SELECT MAX(u_id) FROM t_users;"; OleDbDataAdapter dataAdapter = new OleDbDataAdapter(selectMaxID, connection); DataSet result = new DataSet(); dataAdapter.Fill(result); int maxID = Convert.ToInt32(result.Tables[0].Rows[0][0].ToString()); string insertString = "INSERT INTO t_users(u_id, u_name, u_password) VALUES ("+ (maxID+1).ToString() + ",'" + userBox.Text + "','" + passwordBox.Password + "');"; OleDbCommand insertCommand = new OleDbCommand(insertString, connection); insertCommand.ExecuteNonQuery();
  • 25.
    http://www.slideshare.net/IgorShkulipa 25 Работа сMicrosoft Office Корпорация Майкрософт предлагает несколько основных сборок взаимодействия (primary interop assembly, PIA), в которых содержится официальное описание наиболее часто используемых библиотек Microsoft Office XP. Microsoft Office XP PIA облегчают взаимодействие между управляемым кодом и СОМ-библиотеками Office XP. • Microsoft.Office.Interop.Access.dll • Microsoft.Office.Interop.Excel.dll • Microsoft.Office.Interop.FrontPage.dll • Microsoft.Office.Interop.FrontPageEditor.dll • Microsoft.Office.Interop.Graph.dll • Microsoft.Office.Interop.Outlook.dll • Microsoft.Office.Interop.OutlookViewCtl.dll • Microsoft.Office.Interop.Owc.dll • Microsoft.Office.Interop.PowerPoint.dll • Microsoft.Office.Interop.Publisher.dll • Microsoft.Office.Interop.SmartTag.dll • Microsoft.Office.Interop.Visio.dll • Microsoft.Office.Interop.Word.dll
  • 26.
  • 27.
    http://www.slideshare.net/IgorShkulipa 27 Экспорт вExcel using MOIE = Microsoft.Office.Interop.Excel; ... MOIE.Application excel=new MOIE.Application(); excel.Visible = true; excel.SheetsInNewWorkbook = 10; excel.Workbooks.Add(Type.Missing); MOIE.Workbook workBook = excel.Workbooks[1]; MOIE.Worksheet workSheet = workBook.Sheets[1]; for (int i = 0; i < userListBox.Items.Count; i++) { MOIE.Range range = workSheet.get_Range("A" + (i+1).ToString(), Type.Missing).Cells; range.Value2 = userListBox.Items[i].ToString(); if ((i % 2) == 0) { range.Font.Bold = true; } } workBook.SaveAs("result.xlsx"); excel.Quit();
  • 28.
    http://www.slideshare.net/IgorShkulipa 28 Лабораторная работа№12. ADO.NET и Office Interop Спроектировать базу данных для хранения информации о документах на диске (имя, путь, дата создания, формат…), а так же для хранения информации о ключевых словах и тематике документа. Создать приложение для индексации (создания списка ключевых слов и определения тематики) текстовых файлов (*.txt) и документов MS Office (*.xls, *.xlsx, *.doc, *.docx, *.ppt, *.pptx) и записи результатов в базу данных. Реализовать хранение/чтение/редактирование информации о документах.