
- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
- •Классы потоков. Класс Stream. Классы байтовых потоков. Классы символьных потоков. Классы двоичных потоков.
- •Класс FileStream и файловый ввод-вывод на побайтовой основе. Открытие и закрытие файла. Запись данных в файл. Считывание байтов из объекта класса FileStream.
- •Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader.
- •Считывание и запись двоичных данных. Класс BinaryWriter. Класс BinaryReader.
- •6. Навигация по файловой системе: классы для работы с файловой системой.
- •7. Получение сведений о файле; копирование файлов; перечисление файлов в папке; изменение расширения файлов.
- •5.3. Изменение расширения файлов
- •8. Основы организации потоков. Потоки и многозадачность. Пространство имен System.Threading. Класс Thread. Создание потока.
- •9. Использование нескольких потоков. Планирование потоков, приоритеты потоков.
- •10. Проблемы одновременности и синхронизации потоков. Общий доступ к данным из разных потоков, предотвращение коллизий.
- •11. Синхронизация доступа к общим данным с помощью блокировок. Управление временем существования потоков.
- •12. Краткий обзор ado.Net. Три стороны технологии ado.Net. Пространство имен System.Data.
- •13. Поставщики данных ado.Net. Поведение объектов подключения.
- •14. Объектная модель ado.Net
- •16. Создание соединения с источником данных. Члены типа dbConnection. Обработка исключений при работе с ms sql
- •Конструкторы
- •Свойства
- •События
- •17. Работа с бд с пом. Sql-запросов. Класс SqlCommand. Объект Command. Создание и инициализация. Командная строка sql-запроса CommandText.
- •Конструкторы
- •Свойства
- •18. Выборка, добавление, удаление и обновление данных с помощью sql-запросов на подсоединенном уровне.
- •19. Вывод информации с использованием объекта чтения данных: создание SqlDataReader; чтение данных из DataReader; чтение полей из текущей записи; закрытие DataReader.
- •20. Организация хранения данных. Объект DataSet
- •21. Таблицы и поля: объекты DataTable и DataColumn
- •22. Строки: объект DataRow
- •23. Связи между таблицами: объект DataRelation
- •24. Создание подключения к базе данных. Управляемые провайдеры
- •25. Объект DataAdapter. Класс SqlDataAdapter
- •Конструкторы:
- •Свойства
- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
Свойства
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 с пом адаптера данных. Сначала создадим строку соединения с БД, строку запроса выборки всех записей из табл «Туристы» и передадим эти строки конструктору SqlDataAdapter. Заполним DataSet новыми DataTable с помощью метода Fill(…) и отобразим содержимое DataSet.
MyDS.Clear();
Console.WriteLine("Заполнение DataSet с помощью адаптера данных:");
///////////////////////////////////////////////////
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 st4="Connect Timeout=30";
// string st5 ="User Instance=True";
string st6 = "Pooling=False;";
cn.ConnectionString = st1 + st2 + st3 + st6;
Console.WriteLine(cn);
//////////////////////////////////////////////////
string stSQL = "Select * From Туристы";
SqlCommand com = new SqlCommand(stSQL, cn);
Console.WriteLine(com.CommandText);
SqlDataAdapter MyAdap = new SqlDataAdapter(com.CommandText, cn);
MyAdap.Fill(MyDS,"Turfirma");
//////////////////////////////////////////////////////
Console.WriteLine("Данные DataSet:");
Console.WriteLine("Таблицы в DataSet:" + MyDS.DataSetName);
//Вывод имени DataSet и расширенных свойств:
foreach (System.Collections.DictionaryEntry de in MyDS.ExtendedProperties)
Console.WriteLine("Ключ " + de.Key + " , значение " + de.Value);
Console.WriteLine();
//Вывод каждой таблицы:
foreach (DataTable dt in MyDS.Tables)
{
Console.WriteLine("Таблица :" + dt.TableName);
//Вывод имен столбцов:
for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
Console.Write(dt.Columns[curCol].ColumnName.Trim() + "\t");
Console.WriteLine("\n--------------------------------------------");
//Вывод содержимого DataTable:
for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
{
for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
Console.Write(dt.Rows[curRow][curCol].ToString().Trim() + "\t");
Console.WriteLine();
}
}
MyDS.Clear();
Обновление БД с пом адаптера данных. Адаптеры данных могут не только заполнять табл объекта 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();
Вопросы к экзамену по учебной дисциплине
«Современные технологии программирования»