Представление данных в виде таблицы на форме достаточно удобно в ряде случаев: можно сразу просматривать большое количество записей. Однако для постоянного внесения изменений в базу данных более удобным будет индивидуальное представление записей, когда значение каждого поля находится в отдельном текстовом поле. Проект DataWizardMDB, рассмотренный в первой главе, представляет собой подобную форму.
Создайте новое Windows-приложение. Назовите его "DataTextBox". Переходим на вкладку Data панели инструментов Toolbox и перетаскиваем oleDbDataAdapter. В запустившемся мастере устанавливаем подключение к файлу Microsoft Access "BDTur_firm.mdb" и выбираем все поля таблицы "Туристы". В свойствах oleDbDataAdapter1 на информационной панели нажимаем "Generate Dataset". Называем его "dsTourists". Переходим в код формы, подключаем пространство имен:
using System.Data.OleDb;
В конструкторе формы после InitializeComponent вызываем метод Fill объекта oleDbDataAdapter:
oleDbDataAdapter1.Fill(dsTourists1);
Переключаемся в режим дизайна. Располагаем на форме Label и TextBox. В свойстве Text элемента label вводим "Фамилия", в этом же свойстве элемента textBox оставляем пустую строку. Свойству Size формы устанавливаем значение 300; 100.
Щелкаем на знак (+) свойства DataBindings элемента управления textBox. В значении поля Text этой группы снова щелкаем на знак (+) около элемента dsProvider и выбираем поле "Фамилия" (рис. 3.1):
(рис 3.1) Связывание элемента textBox с даннымиЗапускаем приложение. Теперь в текстовое поле выводится первое значение столбца "Фамилия" (рис. 3.2):
(рис 3.2) Готовая формаВ программном обеспечении к курсу вы найдете приложение DataTextBox (Code\Glava2\ DataTextBox).
Теперь рассмотрим связывание элементов управления с данными, осуществляемое программным образом. Создайте новое Windows-приложение. Назовите его "DataBindings". На создавшейся форме располагаем по четыре элемента TextBox и Label (рис. 3.3):
(рис 3.3) Расположение элементов на формеТекстовым полям, расположенным напротив надписей, устанавливаем свойство Name следующим образом:
Код туриста - txtID Фамилия - txtLastName Имя - txtFirstName Отчество - txtMiddleName.
Далее подключаем пространство имен:
using System.Data.OleDb;
Задаем строки подключения:
string сommandText = "SELECT Имя, [Код туриста], Отчество, Фамилия FROM Туристы"; string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava1\BDTur_firm.mdb" ";User ID=Admin;Jet OLEDB:Encrypt Database=False";
Устанавливаем соединение и определяем все необходимые объекты в конструкторе формы:
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = conn;
myCommand.CommandText = commandText;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = myCommand;
DataSet ds = new DataSet();
dataAdapter.TableMappings.Add("Table", "Туристы");
dataAdapter.Fill(ds);
Для связывания свойства Text текстового поля txtID с полем "Код туриста" таблицы "Туристы" используем код
txtID.DataBindings.Add("Text", ds, "Туристы.Код туриста");
Аналогично для других текстовых полей:
txtFirstName.DataBindings.Add("Text", ds, "Туристы.Имя");
txtLastName.DataBindings.Add("Text", ds, "Туристы.Фамилия");
txtMiddleName.DataBindings.Add("Text", ds, "Туристы.Отчество");
Обратите внимание на названия соответствующих столбцов. На практике вы никогда не встретите названий столбцов таблицы базы данных, содержащих пробелы между слов, и к тому же на кириллице - это нонсенс. В нашем учебном проекте тем не менее все работает. Почему? Дело в том, что среда Visual Studio .NET поддерживает кодировку Unicode, поэтому теоретически названия переменных и объектов можно давать на русском языке. Вы можете убедиться в этом, переименовав, скажем переменную "connectionString" в "строкаПодключения" а "ds" в "ДатаСет" и запустить приложение - все будет работать. Но если мы будем создавать коммерческое приложение, которое должно будет работать в самых разных условиях, подобный код сам по себе может стать источником многочисленных ошибок. Поэтому давать названия на кириллице не следует. Для ясности изложения, однако, оставим названия столбцов как есть.
Закрываем соединение:
conn.Close();
Запускаем приложение. В текстовых полях выводится соответствующая информация.
Продолжим работу над проектом DataBindings. При выводе данных в виде отдельных записей необходимо реализовать возможность перемещения по записям. Это можно сделать с помощью экземпляра класса CurrencyManager. Располагаем на форме четыре кнопки и надпись в ряд следующим образом (рис. 3.4):
(рис 3.4) Расположение кнопокУстанавливаем следующие свойства элементов управления:
| Элемент Name | Text | |
|---|---|---|
| Кнопка | btnFirst | << |
| Кнопка | btnPrevious | < |
| Кнопка | btnNext | > |
| Кнопка | btnLast | >> |
| Надпись | lblRecordsPosition |
Объявляем экземпляр cmRecords класса CurrencyManager в классе формы:
CurrencyManager cmRecords;
В конструкторе формы Form1 связываем созданный объект cmRecords с таблицей "Туристы" объекта ds:
cmRecords = (CurrencyManager)BindingContext[ds, "Туристы"];
Создаем обработчиков для событий ItemChanged и PositionChanged объекта cmRecords:
cmRecords.ItemChanged+=new ItemChangedEventHandler(cmRecords_ItemChanged); cmRecords.PositionChanged+=new EventHandler(cmRecords_PositionChanged);
Вызываем метод, отображающий навигацию по записям:
DisplayRecordsPosition ();
Создаем этот метод:
private void DisplayRecordsPosition()
{
lblRecordsPosition.Text = "Запись " + (cmRecords.Position + 1)
+ " из " + cmRecords.Count;
}
Добавляем методы, вызывающие метод DisplayRecordsPosition() в случае наступления событий ItemChanged и PositionChanged:
private void cmRecords_ItemChanged( object sender, ItemChangedEventArgs e)
{
DisplayRecordsPosition();
}
private void cmRecords_PositionChanged( object sender, System.EventArgs e)
{
DisplayRecordsPosition();
}
Добавляем обработчиков для нажатий навигационных кнопок:
private void btnFirst_Click(object sender, System.EventArgs e)
{
cmRecords.Position = 0;
}
private void btnPrevious_Click(object sender, System.EventArgs e)
{
cmRecords.Position--;
}
private void btnNext_Click(object sender, System.EventArgs e)
{
cmRecords.Position++;
}
private void btnLast_Click(object sender, System.EventArgs e)
{
cmRecords.Position = cmRecords.Count - 1;
}
Запускаем приложение. Теперь можно перемещаться по записям (рис. 3.5):
(рис 3.5) Форма с навигационными кнопкамиВ программном обеспечении к курсу вы найдете приложение DataBindings (Code\Glava2\DataBindings).
Файл базы данных Microsoft Access, подобно другим документам Office, можно защитить с помощью пароля на открытие. Скопируйте файл BDTur_firm.mdb, с которым мы работали в первой главе, назовите его "BD_withPassword.mdb". Для установки пароля нам понадобится открыть базу в так называемом монопольном, однопользовательском режиме. Дело в том, что возможность установки пароля при одновременной работе нескольких
(рис 3.6) Монопольное открытие файла базы данных Появляется окно базы данных. В главном меню переходим "Сервис \ Защита \ Задать пароль базы данных", в окне "Задание пароля базы данных" вводим пароль "12345" и подтверждаем его (рис. 3.7).
(рис 3.7) Задание пароля базы данных Теперь всякий раз при открытии этого файла на любом компьютере нужно будет вводить указанный пароль (рис. 3.8).
(рис 3.8) Открывание базы данных с паролемДля изменения пароля нам потребуется удалить существующий и затем задать новый. Снова открываем базу в монопольном режиме, в главном меню переходим "Сервис \ Защита \ Удалить пароль базы данных". В появившемся окне вводим текущий пароль, после нажатия кнопки "OK" он будет удален. Для ввода нового значения опять переходим к пункту меню "Задать пароль базы данных", на этот раз введем более сложный пароль "q1w2e3r4t5y6u7i8o9p0".
Защита файла с помощью пароля - крайне ненадежный способ, его нельзя применять в реальных приложениях. Пароль хранится в открытом виде, и его очень легко вскрыть. В Интернете множество утилит, предназначенных для этого, например, Access Password Recovery Genie (http://www.lenosoft.com). После запуска этой программы выбираем файл MS Access, пароль к которому нужно подобрать, - и пароль моментально появляется в главном окне (рис. 3.9).
(рис 3.9) Вскрытие пароля файла MS Access Далее нам снова понадобится вводить пароль - чтобы не тратить время, установите снова его значение равным "12345". Займемся теперь подключением к файлу базы данных из приложений. Конечно, вы теперь будете сомневаться, применять ли вообще задание пароля как средство безопасности, но нам в любом случае нужно научиться подключаться даже к такой, "ненадежной" базе. Создайте новый Windows-проект и назовите его "VisualBD_withPassword". Из окна Toolbox перетаскиваем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Переходим на вкладку Data дважды щелкаем на объекте OleDbDataAdapter. В появившемся мастере настраиваем подключение к файлу BD_withPassword.mdb. Теперь в окне "Свойства связи с данными" при проверке соединения появляется сообщение об ошибке (рис. 3.10):
(рис 3.10) Ошибка проверки подключения, возникающая при отсутствии пароля Исходя из текста ошибки, возникает естественное желание снять галочку "Пустой пароль" и в поле пароля ввести "12345". Но и на этот раз возникает
(рис 3.11) Ошибка проверки подключения, возникающая при неправильном указании пароляДело в том, что интерфейс вкладки "Подключение" предназначен для ввода параметров учетной записи при защите на уровне пользователей. Далее мы рассмотрим ее. Здесь же снова устанавливаем галочку "Пустой пароль" и переходим на вкладку "Все". Дважды щелкаем на свойстве Jet OLEDB:Database Password (или, выделив его, нажимаем на кнопку "Изменить значение"), в появившемся окне "Изменение значения свойства" вводим пароль "12345" (рис. 3.12).
(рис 3.12) Ввод пароля для подключения к базе данных Переходим на вкладку "Подключение" - наконец нам удалось получить доступ к базе (рис. 3.13).
(рис 3.13) Успешная проверка подключения Нажимаем кнопку "OK" для закрытия окна "Свойства связи с данными", в следующих шагах мастера "Data
(рис 3.14) Последний шаг мастера - включение пароля в строку connection stringНа панели компонент формы выделяем объект DataAdapter, переходим в его окно Properties и нажимаем на ссылку Generate dataset. Оставляем название объекта DataSet, предлагаемое по умолчанию. В конструкторе формы заполняем объект DataSet, а также определяем источник данных для элемента DataGrid:
public Form1()
{
InitializeComponent();
oleDbDataAdapter1.Fill(dataSet11);
dataGrid1.DataSource = dataSet11.Tables[0].DefaultView;
}
Здесь мы указываем индекс (равный нулю) единственной таблицы, находящейся в объекте DataSet.
Запускаем приложение. На форму выводятся данные из базы (рис. 3.15):
(рис 3.15) Готовое приложение VisualBD_withPassword В программном обеспечении к курсу вы найдете приложение VisualBD_ withPassword и файл базы данных MS Access "BD_withPassword.mdb" (Code\Glava2\VisualBD_withPassword и BD_withPassword.mdb).
Сделаем точно такое же приложение без использования визуальных средств студии. Создайте новый Windows-проект, назовите его "ProgrammBD_withPassword". Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:
using System.Data.OleDb;
В классе формы создаем строки connectionString и commandText:
string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava2\BD_withPassword.mdb" ";User ID=Admin;Jet OLEDB:Database Password=12345;"; string commandText = "SELECT * FROM Туристы";
Мы включили минимум параметров в строку подключения, среди которых указывается пароль базы:
Jet OLEDB:Database Password=12345;
В конструкторе формы создаем все объекты ADO .NET:
public Form1()
{
InitializeComponent();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connectionString;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGrid1.DataSource = ds.Tables[0].DefaultView;
conn.Close();
}
В программном обеспечении к курсу вы найдете приложение ProgrammBD_ withPassword (Code\Glava2\ ProgrammBD_withPassword).
Microsoft Access предоставляет средства распределенного доступа к базе данных. С одним файлом могут одновременно работать большое количество пользователей, обладающих разными правами: одни могут только просматривать таблицы, другие - только вносить новые данные, и лишь администраторы базы обладают полным доступом. Когда мы устанавливаем пакет Microsoft Office на локальный компьютер и, ни о чем не задумываясь, начинаем создавать свою базу в программе Access, мы по умолчанию выступаем в роли администратора. Поставим теперь задачу: разделить доступ для двух пользователей - один сможет только просматривать данные (читать), другой по-прежнему будет обладать полным доступом. Скопируйте файл BDTur_firm.mdb и назовите его "BDwithUsers.mdb". Открываем базу, в главном меню программы переходим "Сервис \ Защита \ Мастер" (см. рис. 2.7). Появляется мастер защиты, в первом шаге которого доступен единственный переключатель "Создать файл рабочей группы" ( рис. 3.16):
(рис 3.16) Первый шаг мастера защиты Файл рабочей группы представляет собой своеобразный электронный ключ, в котором будут храниться созданные настройки. Он имеет расширение *.mdw. В следующем шаге мастера нажимаем кнопку "Обзор" - по умолчанию мы оказываемся в той же директории, где расположен исходный файл базы данных BDwithUsers.mdb, вводим название создаваемого файла
(рис 3.17) Определение файла рабочей группы BDWorkFile.mdw Теперь предстоит определить, какие объекты базы данных защищены. Оставляем все таблицы и нажимаем кнопку "Далее" (рис. 3.18).
(рис 3.18) Определение объектов базы данных, которые будут защищеныМы добрались до самих рабочих групп. Программа Microsoft Access предлагает несколько рабочих групп, в каждой из которых может быть большое число пользователей. К примеру, пять пользователей могут обладать полными правами, десять - быть разработчиками проекта и еще пять - обладать правами на обновление данных. Код группы также можно не запоминать. Мы выбираем группу "Только чтение", отмечая ее
(рис 3.19) Выбор рабочей группы Теперь требуется определить права группы Users. Это группа в любом случае будет входить в файл BDWorkFile.mdw; по умолчанию пользователи, входящие в нее, могут работать с базой данных без всякого пароля. Предоставление каких-либо прав этой группе означает предоставление этих же прав любому пользователю. Поэтому из соображений безопасности Microsoft Access предлагает вариант по умолчанию. Изменение этого варианта означает встраивание "черного" входа в файл рабочей группы. Мы оставляем предложенное значение и нажимаем кнопку "Далее" (рис. 3.20):
(рис 3.20) Определение разрешений группы UsersВ следующем шаге мастера следует определить пользователей и пароли. Именно эти сведения для каждого пользователя будут постоянно использоваться в работе с приложением, поэтому на них следует обратить внимание. В поле "Пользователь:" вводим "Adonetuser", задаем этому пользователю пароль "12345", нажимаем кнопку "Добавить пользователя в список". Поля "Пользователь" и "Пароль" очищаются, а в списке, расположенном в левой части формы, появляется новая запись. Нажимаем кнопку "Далее" (рис. 3.21).
(рис 3.21) Добавление пользователя "Adonetuser" Итак, теперь у нас уже есть рабочая группа - "Только чтение", и теперь появился пользователь "Adonetuser". Из выпадающего списка "Группа или пользователь" следует выбрать "Adonetuser" и отметить галочкой группу "Только чтение" (рис. 3.22, А). При выборе второго пользователя из выпадающего списка -
(рис 3.22) Распределение пользователей в рабочие группы. А - включение пользователя "Adonetuser" в группу "Только чтение", Б - вхождение пользователя "Chingiz Kariev" в группу "Admins" по умолчанию В последнем шаге мастера создается резервная копия базы данных. Она располагается в той же самой директории, где и основная (рис. 3.23). Несмотря на свое расширение - *.
(рис 3.23) Создание резервной копии базы данных При нажатии на кнопку "Готово" появляется отчет, создаваемый мастером защиты. Он включает в себя перечень всех сведений, которые в дальнейшем могут понадобиться для восстановления доступа к базе:
Отчет мастера защиты Данный отчет содержит все сведения, необходимые для воссоздания файла рабочей группы и восстановления доступа к защищенной базе данных в случае повреждения. Напечатайте или экспортируйте этот отчет и сохраните его в надежном месте. Незащищенная база данных: D:\Uchebnik\Code\Glava2\BDwithUsers.bak Защищенная база данных: D:\Uchebnik\Code\Glava2\BDwithUsers.mdb Файл рабочей группы: D:\Uchebnik\Code\Glava2\BDWorkFile.mdw Пользователь: Microsoft Access Организация: Код рабочей группы: mx4qX5Gy6OGUgwmOZpt Защищенные объекты: Таблицы: Информация о туристах Оплата Путевки Сезоны Туристы Туры <Новые таблицы и запросы> Запросы: <Новые таблицы и запросы> Формы: <Новые формы> Отчеты: <Новые отчеты> Макросы: <Новые макросы> База данных: Пароль VBE не установлен Группы: Имя: Только чтение Код группы: FecIdp7S4zQTMaV5qAp Users: Adonetuser Имя: Admins Код группы: <Созданные ранее> Users: Chingiz Kariev Имя: Users Код группы: <Созданные ранее> Users: Chingiz Kariev Adonetuser Пользователи: Имя: Chingiz Kariev Личный код: ifXdiQ2D2GaQvBhly Пароль: Группы: Admins Имя: Adonetuser Личный код: U6QTwfQ5qGu1Djmrbe4 Пароль: 12345 Группы: Только чтение Имя: admin Личный код: <Созданные ранее> Пароль: S0nxw3IDds5rO Группы: Users Отчет мастера защиты Дата работы г.
Желательно последовать совету мастера и сохранить эти сведения в надежном месте.
Итак, в результате всех проделанных действий в рабочем каталоге появились три файла - BDwithUsers.
(рис 3.24) Файлы, полученные в результате работы мастераВ программном обеспечении к курсу вы найдете эти три файла (Code\Glava2\ BDwithUsers.
Файл BDwithUsers.
Запускаем файл BDWorkFile.mdw - появляется окно, в котором следует ввести имя пользователя "Adonetuser" и пароль "12345" (рис. 3.25):
(рис 3.25) Аутентификация пользователя "Adonetuser"Открывается окно базы данных, в котором имеющиеся таблицы доступны только для чтения. Выходим из приложения и запускаем его снова. Введем на этот раз имя администратора базы - "Chingiz Kariev", без
(рис 3.26) Аутентификация пользователя "Chingiz Kariev"На этот раз база данных открывается с полным доступом, более того, выбрав пункт главного меню "Сервис \ Защита \ Мастер_", можно редактировать уже существующий файл рабочей группы, добавляя например, новых пользователей (рис. 3.27):
(рис 3.27) Первый шаг мастера. Изменение файла BDWorkFile.mdw рабочей группы При создании файла рабочей группы BDWorkFile.mdw мы определили его дальнейшее использование по умолчанию (см. рис. 3.17). Это означает, что вся дальнейшая работа с программой Microsoft Access на данном компьютере будет производиться от имени этого файла и определенных в нем пользователей. Без наличия соответствующих прав будет невозможно создать даже новую базу
В результате проделанных операций мы вернулись к файлу рабочей группы, принятому по умолчанию. Теперь при создании новых баз данных снова будем работать от имени администратора "Admin". Однако мы не сможем открыть базу данных BDwithUsers.mdb, использующую другой файл рабочей группы (рис. 3.31):
(рис 3.31) Попытка открыть базу данных BDwithUsers.mdbДля открытия базы данных нам снова нужно будет связаться со своеобразным электронным ключом - файлом BDWorkFile.mdw. Сделайте это самостоятельно.
Для распространения подготовленной базы данных на компьютеры пользователей вам потребуется скопировать сам файл базы данных и файл рабочей группы, а затем связать их.
Изменим пароль администратора "Chingiz Kariev" базы BDwithUsers.mdb. Открываем от имени этого пользователя базу данных, в главном меню переходим "Сервис \ Защита \ Пользователи и группы_" (см. рис. 3.7). В появившемся окне "Пользователи и группы" из выпадающего списка "Имя" выбираем этого пользователя, переходим на вкладку "Изменение пароля". Оставляя пустым поле "Текущий пароль", вводим и подтверждаем пароль "a1s2d3f4g5h6j7k8l9z0" (рис. 3.32):
(рис 3.32) Изменение пароля администратора базы данных Аналогично, открывая базу от имени пользователя "Adonetuser", можно изменить его пароль.
Может показаться, что вся эта продуманная система разделения пользователей предоставляет надежную безопасность создаваемым приложениям. Но это не так - вся информация по-прежнему хранятся в незашифрованном виде в файле рабочей группы. Достаточно получить к этому файлу доступ - а для работы самой базы данных это необходимое условие, - чтобы получить все сведения о пользователях и их паролях. Утилита Access Password (http://www.thegrideon.com) позволяет считывать все данные (рис. 3.33):
(рис 3.33) Вскрытие учетных записей пользователей MS AccessС помощью утилиты просмотрим также содержимое файла System.mdw. Здесь мы видим всего одного пользователя "admin"с пустым паролем, обладающего правами администратора (рис. 3.34):
(рис 3.34) Просмотра файла System.mdwИменно от этого пользователя по умолчанию мы начинаем работать с MS Access после установки пакета Microsoft Office.
Займемся подключением к базе из приложений. Создайте новый Windows-проект и назовите его "VisualBDwithUsers". Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Переходим на вкладку Data панели инструментов Toolbox, дважды щелкаем на объекте OleDbDataAdapter. В появившемся мастере настраиваем подключение к базе BDwithUsers.mdb, в поле "Пользователь" вводим "Adonetuser", в поле "Пароль" - значение "12345". Но при проверке подключения снова появляется сообщение об ошибке (рис. 3.35):
(рис 3.35) Ошибка при проверке подключения к базе "BDwithUsers.mdb"В чем же дело? Мы ведь ввели все значения в специально предназначенные для этого поля! Интерфейс вкладки "Подключение" снова не предоставляет возможности ввода всех нужных сведений для подключения. Переходим на вкладку "Все", выделяем свойство "Jet OLEDB:System database" и нажимаем кнопку "Изменить значение" (можно также дважды щелкнуть на этом свойстве). В появившемся окне "Изменение значения свойства" указываем путь к файлу BDWorkFile.mdw вместе с его полным названием (включающим расширение файла) (рис. 3.36).
(рис 3.36) Определение значение свойства "Jet OLEDB:System database"Переходим на вкладку "Подключение", проверяем связь с базой - на этот раз проверка будет успешной (рис. 3.37).
(рис 3.37) Успешная проверка подключения к базе "BDwithUsers.mdb"Нажимаем кнопку "OK" для закрывания окна "Свойства связи с данными". Теперь появляется дополнительное окно, в котором следует повторно ввести пароль пользователя (рис. 3.38).
(рис 3.38) Дополнительно окно подключения к базе данных В этом окне заметно "обрезанное" расположение подписей полей: это можно считать недоработкой VS 2003 - даже при разрешении экрана 1280х1024 форма выглядит так же. Дополнительно в выпадающем списке "Режим открытия" выбираем значение DB_MODE_READ, поскольку пользователь "Adonetuser" обладает правами только на чтение данных. Закрываем это окно, завершаем работу мастера, настраивая извлечение всех записей из таблицы "Туристы". В последнем шаге мастера оставляем включение пароля в строку connection string (см. рис. 3.14).
На панели компонент формы выделяем объект DataAdapter, переходим в его окно Properties и нажимаем на ссылку Generate dataset. Оставляем название объекта DataSet, предлагаемое по умолчанию. В конструкторе формы заполняем объект DataSet, а также определяем источник данных для элемента DataGrid:
public Form1()
{
InitializeComponent();
oleDbDataAdapter1.Fill(dataSet11);
dataGrid1.DataSource = dataSet11.Tables[0].DefaultView;
}
Запускаем приложение. На форму снова выводятся данные из базы (см. рис. 3.15).
В программном обеспечении к курсу вы найдете приложение VisualB DwithUsers (Code\Glava2\ VisualBDwithUsers).
Сделаем точно такое же приложение без использования визуальных средств студии. Создайте новый Windows-проект, назовите его "ProgrammBDwithUsers". Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:
using System.Data.OleDb;
В классе формы создаем строки connectionString и commandText:
string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava2\BDwithUsers.mdb" ";Jet OLEDB:System database=""D:\Uchebnik\Code\Glava2 \BDWorkFile.mdw"";User ID=Adonetuser;Password=12345;"; string commandText = "SELECT * FROM Туристы";
В конструкторе формы создаем все объекты ADO .NET:
public Form1()
{
InitializeComponent();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connectionString;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGrid1.DataSource = ds.Tables[0].DefaultView;
conn.Close();
}
В программном обеспечении к курсу вы найдете приложение ProgrammBDwithUsers (Code\Glava2\ ProgrammBDwithUsers).
База данных, защищенная на уровне пользователей, может также содержать пароль на открытие. Скопируйте файл базы BDwithUsers.mdb и назовите его "BDwithUsersP.mdb". Открываем новый файл в монопольном режиме от имени пользователя "Chingiz Kariev". В главном меню программы переходим "Сервис \ Защита \ Задать пароль базы данных". В появившемся окне вводим пароль "98765" и подтверждаем его. Теперь при повторном открытии от имени любого пользователя необходимо вначале проходить аутентификацию, а затем вводить пароль базы данных (рис. 3.39):
(рис 3.39) Аутентификация и ввод пароля на открытие базы Базы данных BDwithUsers.mdb и BDwithUsersP.mdb используют один файл рабочей группы BDWorkFile.mdw. Просмотрев его содержимое при помощи программы Access Password, мы обнаружим, что его содержимое не изменилось (см. рис. 3.33). Этого и следовало ожидать - в файле рабочей группы хранятся сведения об учетных записях пользователей и группах, но не пароли самих баз данных. Для просмотра пароля базы открываем файл BDwithUsersP.mdb (рис. 3.40):
(рис 3.40) Просмотр файла BDwithUsersP.mdbСоздайте новое Windows-приложение и назовите его "Programm BDwithUsersP". На этот раз создадим подключение программным образом. Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:
using System.Data.OleDb;
В классе формы создаем строки connectionString и commandText:
string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava2\BDwithUsersP.mdb" ";Jet OLEDB:System database=""D:\Uchebnik\Code\Glava2 \BDWorkFile.mdw"";User ID=Adonetuser;Password=12345; Jet OLEDB:Database Password=98765;"; string commandText = "SELECT * FROM Туристы";
Здесь мы добавили значения пароля "98765" в параметре "Jet OLEDB:Database Password". Подключение не будет зависеть от порядка передаваемых параметров, строка connectionString может выглядеть и так:
string connectionString = @"Jet OLEDB:Database Password=98765;Provider=""Microsoft.Jet.OLEDB.4.0""; Data Source=""D:\Uchebnik\Code\Glava2 \BDwithUsersP.mdb"";Password=12345;Jet OLEDB:System database=""D:\Uchebnik\Code\Glava2\BDWorkFile.mdw" ";User ID=Adonetuser;";
Тем не менее следует придерживаться последовательного расположения параметров для более удобного чтения кода. В конструкторе формы создаем все объекты ADO .NET:
public Form1()
{
InitializeComponent();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connectionString;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGrid1.DataSource = ds.Tables[0].DefaultView;
conn.Close();
}
В программном обеспечении к курсу вы найдете приложение Programm BDwithUsersP (Code\Glava2\ ProgrammBDwithUsersP).
Представление данных в виде таблицы на форме достаточно удобно в ряде случаев: можно сразу просматривать большое количество записей. Однако для постоянного внесения изменений в базу данных более удобным будет индивидуальное представление записей, когда значение каждого поля находится в отдельном текстовом поле. Проект DataWizardMDB, рассмотренный в первой главе, представляет собой подобную форму.
Создайте новое Windows-приложение. Назовите его "DataTextBox". Переходим на вкладку Data панели инструментов Toolbox и перетаскиваем oleDbDataAdapter. В запустившемся мастере устанавливаем подключение к файлу Microsoft Access "BDTur_firm.mdb" и выбираем все поля таблицы "Туристы". В свойствах oleDbDataAdapter1 на информационной панели нажимаем "Generate Dataset". Называем его "dsTourists". Переходим в код формы, подключаем пространство имен:
using System.Data.OleDb;
В конструкторе формы после InitializeComponent вызываем метод Fill объекта oleDbDataAdapter:
oleDbDataAdapter1.Fill(dsTourists1);
Переключаемся в режим дизайна. Располагаем на форме Label и TextBox. В свойстве Text элемента label вводим "Фамилия", в этом же свойстве элемента textBox оставляем пустую строку. Свойству Size формы устанавливаем значение 300; 100.
Щелкаем на знак (+) свойства DataBindings элемента управления textBox. В значении поля Text этой группы снова щелкаем на знак (+) около элемента dsProvider и выбираем поле "Фамилия" (рис. 3.1):
(рис 3.1) Связывание элемента textBox с даннымиЗапускаем приложение. Теперь в текстовое поле выводится первое значение столбца "Фамилия" (рис. 3.2):
(рис 3.2) Готовая формаВ программном обеспечении к курсу вы найдете приложение DataTextBox (Code\Glava2\ DataTextBox).
Теперь рассмотрим связывание элементов управления с данными, осуществляемое программным образом. Создайте новое Windows-приложение. Назовите его "DataBindings". На создавшейся форме располагаем по четыре элемента TextBox и Label (рис. 3.3):
(рис 3.3) Расположение элементов на формеТекстовым полям, расположенным напротив надписей, устанавливаем свойство Name следующим образом:
Код туриста - txtID Фамилия - txtLastName Имя - txtFirstName Отчество - txtMiddleName.
Далее подключаем пространство имен:
using System.Data.OleDb;
Задаем строки подключения:
string сommandText = "SELECT Имя, [Код туриста], Отчество, Фамилия FROM Туристы"; string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava1\BDTur_firm.mdb" ";User ID=Admin;Jet OLEDB:Encrypt Database=False";
Устанавливаем соединение и определяем все необходимые объекты в конструкторе формы:
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = conn;
myCommand.CommandText = commandText;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = myCommand;
DataSet ds = new DataSet();
dataAdapter.TableMappings.Add("Table", "Туристы");
dataAdapter.Fill(ds);
Для связывания свойства Text текстового поля txtID с полем "Код туриста" таблицы "Туристы" используем код
txtID.DataBindings.Add("Text", ds, "Туристы.Код туриста");
Аналогично для других текстовых полей:
txtFirstName.DataBindings.Add("Text", ds, "Туристы.Имя");
txtLastName.DataBindings.Add("Text", ds, "Туристы.Фамилия");
txtMiddleName.DataBindings.Add("Text", ds, "Туристы.Отчество");
Обратите внимание на названия соответствующих столбцов. На практике вы никогда не встретите названий столбцов таблицы базы данных, содержащих пробелы между слов, и к тому же на кириллице - это нонсенс. В нашем учебном проекте тем не менее все работает. Почему? Дело в том, что среда Visual Studio .NET поддерживает кодировку Unicode, поэтому теоретически названия переменных и объектов можно давать на русском языке. Вы можете убедиться в этом, переименовав, скажем переменную "connectionString" в "строкаПодключения" а "ds" в "ДатаСет" и запустить приложение - все будет работать. Но если мы будем создавать коммерческое приложение, которое должно будет работать в самых разных условиях, подобный код сам по себе может стать источником многочисленных ошибок. Поэтому давать названия на кириллице не следует. Для ясности изложения, однако, оставим названия столбцов как есть.
Закрываем соединение:
conn.Close();
Запускаем приложение. В текстовых полях выводится соответствующая информация.
Продолжим работу над проектом DataBindings. При выводе данных в виде отдельных записей необходимо реализовать возможность перемещения по записям. Это можно сделать с помощью экземпляра класса CurrencyManager. Располагаем на форме четыре кнопки и надпись в ряд следующим образом (рис. 3.4):
(рис 3.4) Расположение кнопокУстанавливаем следующие свойства элементов управления:
| Элемент Name | Text | |
|---|---|---|
| Кнопка | btnFirst | << |
| Кнопка | btnPrevious | < |
| Кнопка | btnNext | > |
| Кнопка | btnLast | >> |
| Надпись | lblRecordsPosition |
Объявляем экземпляр cmRecords класса CurrencyManager в классе формы:
CurrencyManager cmRecords;
В конструкторе формы Form1 связываем созданный объект cmRecords с таблицей "Туристы" объекта ds:
cmRecords = (CurrencyManager)BindingContext[ds, "Туристы"];
Создаем обработчиков для событий ItemChanged и PositionChanged объекта cmRecords:
cmRecords.ItemChanged+=new ItemChangedEventHandler(cmRecords_ItemChanged); cmRecords.PositionChanged+=new EventHandler(cmRecords_PositionChanged);
Вызываем метод, отображающий навигацию по записям:
DisplayRecordsPosition ();
Создаем этот метод:
private void DisplayRecordsPosition()
{
lblRecordsPosition.Text = "Запись " + (cmRecords.Position + 1)
+ " из " + cmRecords.Count;
}
Добавляем методы, вызывающие метод DisplayRecordsPosition() в случае наступления событий ItemChanged и PositionChanged:
private void cmRecords_ItemChanged( object sender, ItemChangedEventArgs e)
{
DisplayRecordsPosition();
}
private void cmRecords_PositionChanged( object sender, System.EventArgs e)
{
DisplayRecordsPosition();
}
Добавляем обработчиков для нажатий навигационных кнопок:
private void btnFirst_Click(object sender, System.EventArgs e)
{
cmRecords.Position = 0;
}
private void btnPrevious_Click(object sender, System.EventArgs e)
{
cmRecords.Position--;
}
private void btnNext_Click(object sender, System.EventArgs e)
{
cmRecords.Position++;
}
private void btnLast_Click(object sender, System.EventArgs e)
{
cmRecords.Position = cmRecords.Count - 1;
}
Запускаем приложение. Теперь можно перемещаться по записям (рис. 3.5):
(рис 3.5) Форма с навигационными кнопкамиВ программном обеспечении к курсу вы найдете приложение DataBindings (Code\Glava2\DataBindings).
Файл базы данных Microsoft Access, подобно другим документам Office, можно защитить с помощью пароля на открытие. Скопируйте файл BDTur_firm.mdb, с которым мы работали в первой главе, назовите его "BD_withPassword.mdb". Для установки пароля нам понадобится открыть базу в так называемом монопольном, однопользовательском режиме. Дело в том, что возможность установки пароля при одновременной работе нескольких
(рис 3.6) Монопольное открытие файла базы данных Появляется окно базы данных. В главном меню переходим "Сервис \ Защита \ Задать пароль базы данных", в окне "Задание пароля базы данных" вводим пароль "12345" и подтверждаем его (рис. 3.7).
(рис 3.7) Задание пароля базы данных Теперь всякий раз при открытии этого файла на любом компьютере нужно будет вводить указанный пароль (рис. 3.8).
(рис 3.8) Открывание базы данных с паролемДля изменения пароля нам потребуется удалить существующий и затем задать новый. Снова открываем базу в монопольном режиме, в главном меню переходим "Сервис \ Защита \ Удалить пароль базы данных". В появившемся окне вводим текущий пароль, после нажатия кнопки "OK" он будет удален. Для ввода нового значения опять переходим к пункту меню "Задать пароль базы данных", на этот раз введем более сложный пароль "q1w2e3r4t5y6u7i8o9p0".
Защита файла с помощью пароля - крайне ненадежный способ, его нельзя применять в реальных приложениях. Пароль хранится в открытом виде, и его очень легко вскрыть. В Интернете множество утилит, предназначенных для этого, например, Access Password Recovery Genie (http://www.lenosoft.com). После запуска этой программы выбираем файл MS Access, пароль к которому нужно подобрать, - и пароль моментально появляется в главном окне (рис. 3.9).
(рис 3.9) Вскрытие пароля файла MS Access Далее нам снова понадобится вводить пароль - чтобы не тратить время, установите снова его значение равным "12345". Займемся теперь подключением к файлу базы данных из приложений. Конечно, вы теперь будете сомневаться, применять ли вообще задание пароля как средство безопасности, но нам в любом случае нужно научиться подключаться даже к такой, "ненадежной" базе. Создайте новый Windows-проект и назовите его "VisualBD_withPassword". Из окна Toolbox перетаскиваем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Переходим на вкладку Data дважды щелкаем на объекте OleDbDataAdapter. В появившемся мастере настраиваем подключение к файлу BD_withPassword.mdb. Теперь в окне "Свойства связи с данными" при проверке соединения появляется сообщение об ошибке (рис. 3.10):
(рис 3.10) Ошибка проверки подключения, возникающая при отсутствии пароля Исходя из текста ошибки, возникает естественное желание снять галочку "Пустой пароль" и в поле пароля ввести "12345". Но и на этот раз возникает
(рис 3.11) Ошибка проверки подключения, возникающая при неправильном указании пароляДело в том, что интерфейс вкладки "Подключение" предназначен для ввода параметров учетной записи при защите на уровне пользователей. Далее мы рассмотрим ее. Здесь же снова устанавливаем галочку "Пустой пароль" и переходим на вкладку "Все". Дважды щелкаем на свойстве Jet OLEDB:Database Password (или, выделив его, нажимаем на кнопку "Изменить значение"), в появившемся окне "Изменение значения свойства" вводим пароль "12345" (рис. 3.12).
(рис 3.12) Ввод пароля для подключения к базе данных Переходим на вкладку "Подключение" - наконец нам удалось получить доступ к базе (рис. 3.13).
(рис 3.13) Успешная проверка подключения Нажимаем кнопку "OK" для закрытия окна "Свойства связи с данными", в следующих шагах мастера "Data
(рис 3.14) Последний шаг мастера - включение пароля в строку connection stringНа панели компонент формы выделяем объект DataAdapter, переходим в его окно Properties и нажимаем на ссылку Generate dataset. Оставляем название объекта DataSet, предлагаемое по умолчанию. В конструкторе формы заполняем объект DataSet, а также определяем источник данных для элемента DataGrid:
public Form1()
{
InitializeComponent();
oleDbDataAdapter1.Fill(dataSet11);
dataGrid1.DataSource = dataSet11.Tables[0].DefaultView;
}
Здесь мы указываем индекс (равный нулю) единственной таблицы, находящейся в объекте DataSet.
Запускаем приложение. На форму выводятся данные из базы (рис. 3.15):
(рис 3.15) Готовое приложение VisualBD_withPassword В программном обеспечении к курсу вы найдете приложение VisualBD_ withPassword и файл базы данных MS Access "BD_withPassword.mdb" (Code\Glava2\VisualBD_withPassword и BD_withPassword.mdb).
Сделаем точно такое же приложение без использования визуальных средств студии. Создайте новый Windows-проект, назовите его "ProgrammBD_withPassword". Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:
using System.Data.OleDb;
В классе формы создаем строки connectionString и commandText:
string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava2\BD_withPassword.mdb" ";User ID=Admin;Jet OLEDB:Database Password=12345;"; string commandText = "SELECT * FROM Туристы";
Мы включили минимум параметров в строку подключения, среди которых указывается пароль базы:
Jet OLEDB:Database Password=12345;
В конструкторе формы создаем все объекты ADO .NET:
public Form1()
{
InitializeComponent();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connectionString;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGrid1.DataSource = ds.Tables[0].DefaultView;
conn.Close();
}
В программном обеспечении к курсу вы найдете приложение ProgrammBD_ withPassword (Code\Glava2\ ProgrammBD_withPassword).
Microsoft Access предоставляет средства распределенного доступа к базе данных. С одним файлом могут одновременно работать большое количество пользователей, обладающих разными правами: одни могут только просматривать таблицы, другие - только вносить новые данные, и лишь администраторы базы обладают полным доступом. Когда мы устанавливаем пакет Microsoft Office на локальный компьютер и, ни о чем не задумываясь, начинаем создавать свою базу в программе Access, мы по умолчанию выступаем в роли администратора. Поставим теперь задачу: разделить доступ для двух пользователей - один сможет только просматривать данные (читать), другой по-прежнему будет обладать полным доступом. Скопируйте файл BDTur_firm.mdb и назовите его "BDwithUsers.mdb". Открываем базу, в главном меню программы переходим "Сервис \ Защита \ Мастер" (см. рис. 2.7). Появляется мастер защиты, в первом шаге которого доступен единственный переключатель "Создать файл рабочей группы" ( рис. 3.16):
(рис 3.16) Первый шаг мастера защиты Файл рабочей группы представляет собой своеобразный электронный ключ, в котором будут храниться созданные настройки. Он имеет расширение *.mdw. В следующем шаге мастера нажимаем кнопку "Обзор" - по умолчанию мы оказываемся в той же директории, где расположен исходный файл базы данных BDwithUsers.mdb, вводим название создаваемого файла
(рис 3.17) Определение файла рабочей группы BDWorkFile.mdw Теперь предстоит определить, какие объекты базы данных защищены. Оставляем все таблицы и нажимаем кнопку "Далее" (рис. 3.18).
(рис 3.18) Определение объектов базы данных, которые будут защищеныМы добрались до самих рабочих групп. Программа Microsoft Access предлагает несколько рабочих групп, в каждой из которых может быть большое число пользователей. К примеру, пять пользователей могут обладать полными правами, десять - быть разработчиками проекта и еще пять - обладать правами на обновление данных. Код группы также можно не запоминать. Мы выбираем группу "Только чтение", отмечая ее
(рис 3.19) Выбор рабочей группы Теперь требуется определить права группы Users. Это группа в любом случае будет входить в файл BDWorkFile.mdw; по умолчанию пользователи, входящие в нее, могут работать с базой данных без всякого пароля. Предоставление каких-либо прав этой группе означает предоставление этих же прав любому пользователю. Поэтому из соображений безопасности Microsoft Access предлагает вариант по умолчанию. Изменение этого варианта означает встраивание "черного" входа в файл рабочей группы. Мы оставляем предложенное значение и нажимаем кнопку "Далее" (рис. 3.20):
(рис 3.20) Определение разрешений группы UsersВ следующем шаге мастера следует определить пользователей и пароли. Именно эти сведения для каждого пользователя будут постоянно использоваться в работе с приложением, поэтому на них следует обратить внимание. В поле "Пользователь:" вводим "Adonetuser", задаем этому пользователю пароль "12345", нажимаем кнопку "Добавить пользователя в список". Поля "Пользователь" и "Пароль" очищаются, а в списке, расположенном в левой части формы, появляется новая запись. Нажимаем кнопку "Далее" (рис. 3.21).
(рис 3.21) Добавление пользователя "Adonetuser" Итак, теперь у нас уже есть рабочая группа - "Только чтение", и теперь появился пользователь "Adonetuser". Из выпадающего списка "Группа или пользователь" следует выбрать "Adonetuser" и отметить галочкой группу "Только чтение" (рис. 3.22, А). При выборе второго пользователя из выпадающего списка -
(рис 3.22) Распределение пользователей в рабочие группы. А - включение пользователя "Adonetuser" в группу "Только чтение", Б - вхождение пользователя "Chingiz Kariev" в группу "Admins" по умолчанию В последнем шаге мастера создается резервная копия базы данных. Она располагается в той же самой директории, где и основная (рис. 3.23). Несмотря на свое расширение - *.
(рис 3.23) Создание резервной копии базы данных При нажатии на кнопку "Готово" появляется отчет, создаваемый мастером защиты. Он включает в себя перечень всех сведений, которые в дальнейшем могут понадобиться для восстановления доступа к базе:
Отчет мастера защиты Данный отчет содержит все сведения, необходимые для воссоздания файла рабочей группы и восстановления доступа к защищенной базе данных в случае повреждения. Напечатайте или экспортируйте этот отчет и сохраните его в надежном месте. Незащищенная база данных: D:\Uchebnik\Code\Glava2\BDwithUsers.bak Защищенная база данных: D:\Uchebnik\Code\Glava2\BDwithUsers.mdb Файл рабочей группы: D:\Uchebnik\Code\Glava2\BDWorkFile.mdw Пользователь: Microsoft Access Организация: Код рабочей группы: mx4qX5Gy6OGUgwmOZpt Защищенные объекты: Таблицы: Информация о туристах Оплата Путевки Сезоны Туристы Туры <Новые таблицы и запросы> Запросы: <Новые таблицы и запросы> Формы: <Новые формы> Отчеты: <Новые отчеты> Макросы: <Новые макросы> База данных: Пароль VBE не установлен Группы: Имя: Только чтение Код группы: FecIdp7S4zQTMaV5qAp Users: Adonetuser Имя: Admins Код группы: <Созданные ранее> Users: Chingiz Kariev Имя: Users Код группы: <Созданные ранее> Users: Chingiz Kariev Adonetuser Пользователи: Имя: Chingiz Kariev Личный код: ifXdiQ2D2GaQvBhly Пароль: Группы: Admins Имя: Adonetuser Личный код: U6QTwfQ5qGu1Djmrbe4 Пароль: 12345 Группы: Только чтение Имя: admin Личный код: <Созданные ранее> Пароль: S0nxw3IDds5rO Группы: Users Отчет мастера защиты Дата работы г.
Желательно последовать совету мастера и сохранить эти сведения в надежном месте.
Итак, в результате всех проделанных действий в рабочем каталоге появились три файла - BDwithUsers.
(рис 3.24) Файлы, полученные в результате работы мастераВ программном обеспечении к курсу вы найдете эти три файла (Code\Glava2\ BDwithUsers.
Файл BDwithUsers.
Запускаем файл BDWorkFile.mdw - появляется окно, в котором следует ввести имя пользователя "Adonetuser" и пароль "12345" (рис. 3.25):
(рис 3.25) Аутентификация пользователя "Adonetuser"Открывается окно базы данных, в котором имеющиеся таблицы доступны только для чтения. Выходим из приложения и запускаем его снова. Введем на этот раз имя администратора базы - "Chingiz Kariev", без
(рис 3.26) Аутентификация пользователя "Chingiz Kariev"На этот раз база данных открывается с полным доступом, более того, выбрав пункт главного меню "Сервис \ Защита \ Мастер_", можно редактировать уже существующий файл рабочей группы, добавляя например, новых пользователей (рис. 3.27):
(рис 3.27) Первый шаг мастера. Изменение файла BDWorkFile.mdw рабочей группы При создании файла рабочей группы BDWorkFile.mdw мы определили его дальнейшее использование по умолчанию (см. рис. 3.17). Это означает, что вся дальнейшая работа с программой Microsoft Access на данном компьютере будет производиться от имени этого файла и определенных в нем пользователей. Без наличия соответствующих прав будет невозможно создать даже новую базу
В результате проделанных операций мы вернулись к файлу рабочей группы, принятому по умолчанию. Теперь при создании новых баз данных снова будем работать от имени администратора "Admin". Однако мы не сможем открыть базу данных BDwithUsers.mdb, использующую другой файл рабочей группы (рис. 3.31):
(рис 3.31) Попытка открыть базу данных BDwithUsers.mdbДля открытия базы данных нам снова нужно будет связаться со своеобразным электронным ключом - файлом BDWorkFile.mdw. Сделайте это самостоятельно.
Для распространения подготовленной базы данных на компьютеры пользователей вам потребуется скопировать сам файл базы данных и файл рабочей группы, а затем связать их.
Изменим пароль администратора "Chingiz Kariev" базы BDwithUsers.mdb. Открываем от имени этого пользователя базу данных, в главном меню переходим "Сервис \ Защита \ Пользователи и группы_" (см. рис. 3.7). В появившемся окне "Пользователи и группы" из выпадающего списка "Имя" выбираем этого пользователя, переходим на вкладку "Изменение пароля". Оставляя пустым поле "Текущий пароль", вводим и подтверждаем пароль "a1s2d3f4g5h6j7k8l9z0" (рис. 3.32):
(рис 3.32) Изменение пароля администратора базы данных Аналогично, открывая базу от имени пользователя "Adonetuser", можно изменить его пароль.
Может показаться, что вся эта продуманная система разделения пользователей предоставляет надежную безопасность создаваемым приложениям. Но это не так - вся информация по-прежнему хранятся в незашифрованном виде в файле рабочей группы. Достаточно получить к этому файлу доступ - а для работы самой базы данных это необходимое условие, - чтобы получить все сведения о пользователях и их паролях. Утилита Access Password (http://www.thegrideon.com) позволяет считывать все данные (рис. 3.33):
(рис 3.33) Вскрытие учетных записей пользователей MS AccessС помощью утилиты просмотрим также содержимое файла System.mdw. Здесь мы видим всего одного пользователя "admin"с пустым паролем, обладающего правами администратора (рис. 3.34):
(рис 3.34) Просмотра файла System.mdwИменно от этого пользователя по умолчанию мы начинаем работать с MS Access после установки пакета Microsoft Office.
Займемся подключением к базе из приложений. Создайте новый Windows-проект и назовите его "VisualBDwithUsers". Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Переходим на вкладку Data панели инструментов Toolbox, дважды щелкаем на объекте OleDbDataAdapter. В появившемся мастере настраиваем подключение к базе BDwithUsers.mdb, в поле "Пользователь" вводим "Adonetuser", в поле "Пароль" - значение "12345". Но при проверке подключения снова появляется сообщение об ошибке (рис. 3.35):
(рис 3.35) Ошибка при проверке подключения к базе "BDwithUsers.mdb"В чем же дело? Мы ведь ввели все значения в специально предназначенные для этого поля! Интерфейс вкладки "Подключение" снова не предоставляет возможности ввода всех нужных сведений для подключения. Переходим на вкладку "Все", выделяем свойство "Jet OLEDB:System database" и нажимаем кнопку "Изменить значение" (можно также дважды щелкнуть на этом свойстве). В появившемся окне "Изменение значения свойства" указываем путь к файлу BDWorkFile.mdw вместе с его полным названием (включающим расширение файла) (рис. 3.36).
(рис 3.36) Определение значение свойства "Jet OLEDB:System database"Переходим на вкладку "Подключение", проверяем связь с базой - на этот раз проверка будет успешной (рис. 3.37).
(рис 3.37) Успешная проверка подключения к базе "BDwithUsers.mdb"Нажимаем кнопку "OK" для закрывания окна "Свойства связи с данными". Теперь появляется дополнительное окно, в котором следует повторно ввести пароль пользователя (рис. 3.38).
(рис 3.38) Дополнительно окно подключения к базе данных В этом окне заметно "обрезанное" расположение подписей полей: это можно считать недоработкой VS 2003 - даже при разрешении экрана 1280х1024 форма выглядит так же. Дополнительно в выпадающем списке "Режим открытия" выбираем значение DB_MODE_READ, поскольку пользователь "Adonetuser" обладает правами только на чтение данных. Закрываем это окно, завершаем работу мастера, настраивая извлечение всех записей из таблицы "Туристы". В последнем шаге мастера оставляем включение пароля в строку connection string (см. рис. 3.14).
На панели компонент формы выделяем объект DataAdapter, переходим в его окно Properties и нажимаем на ссылку Generate dataset. Оставляем название объекта DataSet, предлагаемое по умолчанию. В конструкторе формы заполняем объект DataSet, а также определяем источник данных для элемента DataGrid:
public Form1()
{
InitializeComponent();
oleDbDataAdapter1.Fill(dataSet11);
dataGrid1.DataSource = dataSet11.Tables[0].DefaultView;
}
Запускаем приложение. На форму снова выводятся данные из базы (см. рис. 3.15).
В программном обеспечении к курсу вы найдете приложение VisualB DwithUsers (Code\Glava2\ VisualBDwithUsers).
Сделаем точно такое же приложение без использования визуальных средств студии. Создайте новый Windows-проект, назовите его "ProgrammBDwithUsers". Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:
using System.Data.OleDb;
В классе формы создаем строки connectionString и commandText:
string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava2\BDwithUsers.mdb" ";Jet OLEDB:System database=""D:\Uchebnik\Code\Glava2 \BDWorkFile.mdw"";User ID=Adonetuser;Password=12345;"; string commandText = "SELECT * FROM Туристы";
В конструкторе формы создаем все объекты ADO .NET:
public Form1()
{
InitializeComponent();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connectionString;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGrid1.DataSource = ds.Tables[0].DefaultView;
conn.Close();
}
В программном обеспечении к курсу вы найдете приложение ProgrammBDwithUsers (Code\Glava2\ ProgrammBDwithUsers).
База данных, защищенная на уровне пользователей, может также содержать пароль на открытие. Скопируйте файл базы BDwithUsers.mdb и назовите его "BDwithUsersP.mdb". Открываем новый файл в монопольном режиме от имени пользователя "Chingiz Kariev". В главном меню программы переходим "Сервис \ Защита \ Задать пароль базы данных". В появившемся окне вводим пароль "98765" и подтверждаем его. Теперь при повторном открытии от имени любого пользователя необходимо вначале проходить аутентификацию, а затем вводить пароль базы данных (рис. 3.39):
(рис 3.39) Аутентификация и ввод пароля на открытие базы Базы данных BDwithUsers.mdb и BDwithUsersP.mdb используют один файл рабочей группы BDWorkFile.mdw. Просмотрев его содержимое при помощи программы Access Password, мы обнаружим, что его содержимое не изменилось (см. рис. 3.33). Этого и следовало ожидать - в файле рабочей группы хранятся сведения об учетных записях пользователей и группах, но не пароли самих баз данных. Для просмотра пароля базы открываем файл BDwithUsersP.mdb (рис. 3.40):
(рис 3.40) Просмотр файла BDwithUsersP.mdbСоздайте новое Windows-приложение и назовите его "Programm BDwithUsersP". На этот раз создадим подключение программным образом. Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:
using System.Data.OleDb;
В классе формы создаем строки connectionString и commandText:
string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava2\BDwithUsersP.mdb" ";Jet OLEDB:System database=""D:\Uchebnik\Code\Glava2 \BDWorkFile.mdw"";User ID=Adonetuser;Password=12345; Jet OLEDB:Database Password=98765;"; string commandText = "SELECT * FROM Туристы";
Здесь мы добавили значения пароля "98765" в параметре "Jet OLEDB:Database Password". Подключение не будет зависеть от порядка передаваемых параметров, строка connectionString может выглядеть и так:
string connectionString = @"Jet OLEDB:Database Password=98765;Provider=""Microsoft.Jet.OLEDB.4.0""; Data Source=""D:\Uchebnik\Code\Glava2 \BDwithUsersP.mdb"";Password=12345;Jet OLEDB:System database=""D:\Uchebnik\Code\Glava2\BDWorkFile.mdw" ";User ID=Adonetuser;";
Тем не менее следует придерживаться последовательного расположения параметров для более удобного чтения кода. В конструкторе формы создаем все объекты ADO .NET:
public Form1()
{
InitializeComponent();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connectionString;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGrid1.DataSource = ds.Tables[0].DefaultView;
conn.Close();
}
В программном обеспечении к курсу вы найдете приложение Programm BDwithUsersP (Code\Glava2\ ProgrammBDwithUsersP).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.