
- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
- •Классы потоков. Класс Stream. Классы байтовых потоков. Классы символьных потоков. Классы двоичных потоков.
- •1.5. Классы символьных потоков:
- •1.6. Классы двоичных потоков:
- •Класс FileStream и файловый ввод-вывод на побайтовой основе. Открытие и закрытие файла. Запись данных в файл. Считывание байтов из объекта класса FileStream.
- •Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader.
- •Считывание и запись двоичных данных. Класс BinaryWriter. Класс BinaryReader.
- •Наиболее важные методы выходного потока BinaryWriter:
- •Навигация по файловой системе: классы для работы с файловой системой.
- •Получение сведений о файле; копирование файлов; перечисление файлов в папке; изменение расширения файлов.
- •5.3. Изменение расширения файлов
- •Основы организации потоков. Потоки и многозадачность.
- •Пространство имен System.Threading. Класс Thread. Создание потока.
- •Создание потока. Чтобы создать поток, необходимо создать объект типа Thread. В классе Thread определен следующий конструктор: public Thread(ThreadStart entryPoint),
- •Приоритет потоков. Класс Thead поддерживает установку и получение приоритета потока. Для этого используется перечисление ThreadPriority. Его значения:
- •Использование нескольких потоков. Планирование потоков, приоритеты потоков. Можно создавать в программе несколько дочерних потоков.
- •Создать статический метод SimpleWork() в классе MultiThread (перед методом Main), который выводит на экран Id-номер каждого потока:
- •Проблемы одновременности и синхронизации потоков. Общий доступ к данным из разных потоков, предотвращение коллизий.
- •Синхронизация доступа к общим данным с помощью блокировок.
- •2) Выполнить блокировку операторов в ранее используемых методах SimpleWork и run:
- •Управление временем существования потоков.
- •Краткий обзор ado.Net. Три стороны технологии ado.Net. Пространство имен System.Data.
- •2.2 Три стороны технологии ado.Net
- •15.Поставщики данных ado.Net. Поведение объектов подключения.
- •Объектная модель ado.Net.
- •Создание соединения с источником данных. Члены типа dbConnection. Обработка исключений при работе с ms sql
- •Конструкторы
- •Свойства
- •События
- •Конструкторы
- •Свойства
- •Выборка, добавление, удаление и обновление данных с помощью sql-запросов на подсоединенном уровне.
- •Вывод информации с использованием объекта чтения данных: создание SqlDataReader; чтение данных из DataReader; чтение полей из текущей записи; закрытие DataReader.
- •Сравнение DataReader и DataSet:
- •Чтение данных из DataReader:
- •Организация хранения данных. Объект DataSet.
- •Строки: объект DataRow.
- •Конструкторы:
- •Свойства
- •Передача данных между источником данных и объектом DataSet. Обновление базы данных с помощью адаптера данных.
Конструкторы:
SqlDataAdapter() – инициализирует новый экземпляр класса SqlDataAdapter.
SqlDataAdapter(SqlCommand) – инициализирует новый экземпляр класса SqlDataAdapter с помощью указанной команды SqlCommand в качестве свойства SelectCommand.
SqlDataAdapter(String, SqlConnection) – инициализирует новый экземпляр класса SqlDataAdapter с помощью SelectCommand и объекта SqlConnection.
SqlDataAdapter(String, String) – инициализирует новый экземпляр класса SqlDataAdapter с помощью SelectCommand и строки подключения.
Свойства
SelectCommand – возвращает или задает инструкцию Transact-SQL или хранимую процедуру, используемую для выбора записей из источника данных.
DeleteCommand – возвращает или задает инструкцию Transact-SQL или хранимую процедуру, используемую для удаления записей из набора данных.
InsertCommand – возвращает или задает инструкцию Transact-SQL или хранимую процедуру, используемую для вставки новых записей в источник данных
Методы
Dispose() – освобождает все ресурсы, используемые объектом Component. (Унаследовано от Component.)
Fill() – заполняет объект DataSet или объект DataTable. (Унаследовано от DbDataAdapter.)
GetType – возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
Update() – Выполняет команды SQL-команды Insert, UpDate, Delete для сохранения в базе изменений, выполненных в DataTable.
Передача данных между источником данных и объектом DataSet. Обновление базы данных с помощью адаптера данных.
Обновление базы данных с помощью адаптера данных. Адаптеры данных могут не только заполнять таблицы объекта DataSet, но и поддерживать набор объектов основных SQL-команд, используя их для возвращения модифицированных данных обратно в хранилище данных. При вызове метода Update() адаптера данных проверяется свойство RowState для каждой строки в DataTable и используются соответствующие команды, присвоенные свойствам DeleteCommand, InsertCommand и UpdateCommand адаптера, чтобы записать изменения данного DataTable в источник данных.
При использовании адаптера данных для обновления DataSet необходимо назначить свойствам DeleteCommand, InsertCommand и UpdateCommand действительные (конкретной таблицы БД) объекты команд, а иначе свойства возвратят null.
Добавим новую строку в таблицу «Туристы»:
Console.WriteLine("Обновление базы данных BDTurfirm с помощью объекта адаптера данных:");
Console.WriteLine("Введите информацию о новом туристе! Код туриста++");
int kd = Int32.Parse(Console.ReadLine());
Console.WriteLine("Фамилия?");
string fm = Console.ReadLine();
Console.WriteLine("Имя?");
string nm = Console.ReadLine();
Console.WriteLine("Отчество?");
string otc = Console.ReadLine();
string sql = string.Format("Insert Into Туристы" + "([Код туриста],Фамилия,Имя,Отчество) Values" + "('{0}','{1}','{2}','{3}')",kd, fm, nm, otc);
MyAdap.InsertCommand = new SqlCommand(sql);
MyAdap.InsertCommand.Connection = cn;
// Обновление таблицы Туристы с учетом новой сроки:
DataRow rn =MyDS.Tables["Туристы"].NewRow();
Console.WriteLine("Состояние строки " + rn.RowState);
rn["Код туриста"] = kd;
rn["Фамилия"] = fm;
rn["Имя"] = nm;
rn["Отчество"] = otc;
MyDS.Tables["Туристы"].Rows.Add(rn);
Console.WriteLine("Состояние строки " + rn.RowState); MyAdap.Update(MyDS.Tables["Туристы"]);
После создания объекта команды он «подключается» к адаптеру с помощью свойства InsertCommand. Затем в таблицу «Туристы» добавляется новая строка и адаптер выполнит SQL-команду, так как свойство новой строки RowState – Added.
Модифицируем выбранную строку таблицы «Туристы»:
//////////////////////////////////////////////////////////
Console.WriteLine("Модификация строки!");
Console.WriteLine("Введите код туриста для выбора строки!");
int kdd = Int32.Parse(Console.ReadLine()); Console.WriteLine("Введите новую фамилию туриста для выбранной строки!");
string nfam = Console.ReadLine();
string ssql = string.Format("Update Туристы Set Фамилия ='{0}' where [Код туриста]={1}",nfam,kdd);
MyAdap.UpdateCommand = new SqlCommand(ssql);
MyAdap.UpdateCommand.Connection = cn;
DataRow [] mas_rows = MyDS.Tables["Туристы"].Select(string.Format("[Код_туриста]={0}",kdd));
mas_rows[0]["Фамилия"] = nfam;
// Метод Select выбирает строку и помещает ее в массив объектов DataRow. Нужно указать какую именно строку меняем – mas_rows[0.
Параметр метода Select является строкой, которая содержит некоторое условное выражение.
Console.WriteLine("Состояние строки " + mas_rows[0].RowState);
MyAdap.Update(MyDS.Tables["Туристы"]);
Console.WriteLine("Состояние строки " + mas_rows[0].RowState);
Удалим указанную строку таблицы «Туристы»:
Console.WriteLine("Удаление строки!");
Console.WriteLine("Введите код туриста для удаления строки!");
int cd = Int32.Parse(Console.ReadLine());
string ql = string.Format("Delete from Туристы where [Код туриста]={0}",cd);
Console.WriteLine("Команда удаления " + ql);
SqlCommand cmd = new SqlCommand(ql,cn);
MyAdap.DeleteCommand = cmd;
string fltr = string.Format("[Код туриста]={0}", cd);
DataRow[] mas = MyDS.Tables["Туристы"].Select(fltr);
mas[0].Delete();
Console.WriteLine("Состояние строки " + mas[0].RowState);
MyAdap.Update(MyDS.Tables["Туристы"]);
Console.WriteLine("Состояние строки " + mas[0].RowState);
MyDS.Clear();
Динамическое получение остальных объектов команд во время работы с помощью построителя команд SqlCommandBuilder. Каждый поставщик данных предлагает тип построителя команд, который позволяет автоматически получать объекты команд, содержащие правильные типы команд Delete, Insert и Update на базе исходного оператора Select.
SqlConnection cn = new SqlConnection();
string st1 = "Data Source=.\\SQLExpress;";
string st2 = "AttachDbFilename=\"C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Data\\BDTur_firm.mdf\";";
string st3 = "Integrated Security=True;";
string st6 = "Pooling=False;";
cn.ConnectionString = st1 + st2 + st3 + st6;
Console.WriteLine(cn);
Console.WriteLine(st1 + st2 + st3 + st6);
SqlDataAdapter MyAdap = new SqlDataAdapter("Select * From Туристы", cn);
SqlCommandBuilder builder = new SqlCommandBuilder(MyAdap);