
1432
.pdfPrivate DS_stud As DataSet
Private Adp As OleDbDataAdapter
Private Cmd1 As OleDbCommand
Private Cnt1 As OleDbConnection
Private Foto As String
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
‘ путь к базе данных и к папке с фото
Dim s As String = Application.StartupPath + "\Prim.mdb" Foto = Application.StartupPath + "\Img\"
‘строка соединения с базой данных
Dim Cnt_S As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + s
‘строка команды Select
Dim Cmd_S As String = "Select * From Dp"
‘ создать новое соединение
Cnt1 = New OleDbConnection(Cnt_S)
‘ создать новую команду
Cmd1 = New OleDbCommand(Cmd_S)
Cmd1.Connection = New OleDbConnection(Cnt_S)
Cmd1.CommandTimeout = 20
'новый адаптер с указанными соединением и командой
Adp = New OleDbDataAdapter(Cmd_S, Cnt_S)
'схема данных?
Adp.MissingSchemaAction = MissingSchemaAction.AddWithKey
‘объект DataSet для временного хранения данных
DS_stud = New DataSet("Dp")
‘получить данные
119
Adp.Fill(DS_stud, "Dp")
'создание шаблона команды Insert Adp.InsertCommand = New OleDbCommand( _
"INSERT INTO Dp (S_id, Fio, Img) VALUES (?,?,?)", Cnt1)
'создание шаблона команды Update
Adp.UpdateCommand = New OleDbCommand( _ "UPDATE Dp SET Fio = ?, Img=? WHERE S_id = ?", Cnt1)
'создание шаблона команды Delete Adp.DeleteCommand = New OleDbCommand( _ "DELETE FROM Dp WHERE S_id = ?", Cnt1)
'создание параметров команды Insert Adp.InsertCommand.Parameters.Add( _ "@S_id", OleDbType.Integer, 5, "S_id") Adp.InsertCommand.Parameters.Add( _ "@Fio", OleDbType.VarChar, 20, "Fio") Adp.InsertCommand.Parameters.Add( _ "@Img", OleDbType.VarChar, 20, "Img")
'создание параметров команды Update Adp.UpdateCommand.Parameters.Add( _ "@Fio", OleDbType.VarChar, 20, "Fio") Adp.UpdateCommand.Parameters.Add( _ "@Img", OleDbType.VarChar, 20, "Img") Adp.UpdateCommand.Parameters.Add( _
"@OldS_id", OleDbType.Integer, 5, "S_id").SourceVersion _
=DataRowVersion.Original
'создание параметров команды Delete Adp.DeleteCommand.Parameters.Add( _
"@S_id", OleDbType.Integer, 5, "S_id").SourceVersion = _ DataRowVersion.Original
‘ заполнение свойств DataGridView DataGridView1.AutoGenerateColumns = False DataGridView1.DataSource = DS_stud
120
DataGridView1.DataMember = "Dp"
DataGridView1.AutoSizeColumnsMode = _
DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader
DataGridView1.Show()
‘свойство PictureBox, обеспечивающее пропорциии фото
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
‘процедура показа фото
FotoShow(1)
End Sub
‘ событие “закрыть форму приложения” – обновить данные в БД
Private Sub Form1_FormClosing( _ ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) _ Handles MyBase.FormClosing
Try
‘выполнить проверку
Me.Validate()
‘завершить редактирование
Me.DataGridView1.EndEdit()
‘внести изменения в таблицу БД
Me.Adp.Update(Me.DS_stud, "Dp") 'MsgBox("Все в норме")
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
‘ событие “выбрана строка” – показать фото
Private Sub DataGridView1_RowEnter( _ ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles DataGridView1.RowEnter
121
FotoShow(e.RowIndex)
End Sub
‘ процедура, отображающая фото
Private Sub FotoShow(ByVal RowCur As Integer)
Try
‘ в первом столбце – фамилия
Label1.Text = DS_stud.Tables(0).Rows(RowCur).Item(1)
‘ во втором столбце – имя файла с фото
PictureBox1.Image = System.Drawing.Bitmap.FromFile(Foto + _ DS_stud.Tables(0).Rows(RowCur).Item(2))
‘ нет файла с фото
Catch e1 As System.IO.FileNotFoundException NotFoto()
‘ добавление новой строки в конце списка DataGridView Catch e2 As IndexOutOfRangeException
NotFoto()
End Try
End Sub
‘процедура, стирающая фото
Sub NotFoto() PictureBox1.Image = Nothing PictureBox1.Refresh() Label1.Text = ""
End Sub
‘событие “добавление строки” – нет фото
Private Sub DataGridView1_RowsAdded( _ ByVal sender As System.Object, ByVal e As _
System.Windows.Forms.DataGridViewRowsAddedEventArgs) _ Handles DataGridView1.RowsAdded
NotFoto() End Sub End Class
122
9.4. Задание на тему «Просмотр данных с помощью dbGridView»
Разработать программу, которая выполняет просмотр и добавление записей в таблице базы данных. Одно поле должно содержать имя файла с фотографией. Отображать фотографию, соответствующую текущей записи. Для тестирования программы необходима таблица базы данных Microsoft Access, а также набор графических файлов.
Порядок выполнения лабораторной работы
Создать базу данных для тестирования программы.
Подготовить набор фотографий для тестирования программы.
Создать новый проект – приложение Windows Forms.
Установить связь с базой данных.
Добавить код обработки событий.
Компилировать программу.
Тестировать программу.
Создать документ с описанием работы программы.
123
10. АНАЛИЗ ПАРАМЕТРОВ КОМПЬЮТЕРА
10.1. Анализ системных параметров
Анализ параметров компьютера обычно выполняется с помощью достаточно универсальных утилит, таких, в частности, как Everest. Включение в разрабатываемые приложения кода анализа оборудования, программного обеспечения и других подобных возможностей делает приложения более гибкими и, возможно, эффективными.
Определение версии операционной системы
Номер версии операционной системы и текущую платформу можно определить с помощью класса OSVersion. В следующих строках кода эта информация выводится в поле компонента ListBox с помощью метода Items.Add.
‘ Пример 10.1
Dim Pla As String = Environment.OSVersion.Platform.ToString() Dim Ver As String = Environment.OSVersion.Version.ToString() ListBox1.Items.Add("Платформа " + Pla)
ListBox1.Items.Add("Версия " + Ver)
Получение системной даты и времени
Текущие дату и время можно получить с помощью операторов
DateTime.Today и DateTime.Now, первый из которых дает только дату, а второй дату и время.
‘ Пример 10.2
ListBox1.Items.Add(DateTime.Now.ToString())
ListBox1.Items.Add(DateTime.Today.ToString())
Чтение реестра
Для обращения к реестру используются классы библиотеки Microsoft.Win32. Оператор OpenSubKey открывает раздел реестра, из которого с помощью функции GetValue выбираются сведения о типе процессора и его производителе.
124
‘ Пример 10.3
Dim M As RegistryKey = Registry.LocalMachine M = M.OpenSubKey( _
"HARDWARE\DESCRIPTION\System\CentralProcessor\0") Dim Prc As Object = M.GetValue("Identifier")
Dim Vnd As Object = M.GetValue("VendorIdentifier") ListBox1.Items.Add(Prc.ToString()) ListBox1.Items.Add(Vnd.ToString())
Из следующего раздела извлекаются сведения о статусе BIOS.
‘ Пример 10.4
Dim V As RegistryKey = Registry.LocalMachine V = V.OpenSubKey( _
"HARDWARE\DESCRIPTION\System\MultiFunctionAdapter\4") Dim I_B As Object = V.GetValue("Identifier") ListBox1.Items.Add(I_B.ToString())
Далее читаются дата записи BIOS и аппаратная платформа компьютера.
‘ Пример 10.5
RegistryKey B = Registry.LocalMachine
B = B.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\") Object D_B = B.GetValue("SystemBiosDate")
Object P_M = B.GetValue("Identifier")
Информация о процессах
Для получения сведений о процессах в программе необходима ссылка на пространство имен System.Diagnostics. Информация извлекается с помощью оператора Process.GetProcesses. Между названием процесса и его номером выводится символ табуляции
Chr(9).
‘ Пример 10.6
Dim Proc() As Process = Process.GetProcesses() For Each P As Process In Proc
P.Refresh()
ListBox1.Items.Add(P.ProcessName+Chr(9)+P.Id.ToString()) Next
125
Список установленного программного обеспечения
Для чтения из реестра информации об установленном программном обеспечении в программе требуется поместить ссылку на пространство имен Microsoft.Win32. Для размещения массива строк в поле компонента ListBox используется метод Items.AddRange.
‘ Пример 10.7
Dim R As RegistryKey = Registry.LocalMachine.OpenSubKey( _ "Software\Microsoft\Windows\CurrentVersion\Uninstall")
Dim SubKeys() As String = R.GetSubKeyNames()
ListBox1.Items.AddRange(SubKeys)
Переменные окружения
Для получения информации о переменных окружения в программе требуется поместить ссылку на пространство имен System.Management. Информация о переменных окружения выбирается с помощью запроса Win32_Environment из инструментария управления Windows, затем отображается в поле
ListBox.
‘ Пример 10.8
Dim Query As WqlObjectQuery = _
New WqlObjectQuery("Select * from Win32_Environment")
Dim Find As ManagementObjectSearcher = _
New ManagementObjectSearcher(Query)
For Each Mo As ManagementObject In Find.Get()
ListBox1.Items.Add(Mo("Description") + " - " + _
Mo("Name") + " - " + Mo("UserName") + " - " + _
Mo("VariableValue"))
Next
Учетные записи локальной машины
Для получения информации об учетных записях локальной машины в программе требуется поместить ссылку на пространство
126
имен System.Management. Информация об учетных записях выбирается с помощью запроса Win32_UserAccount из инструментария управления Windows, затем отображается в поле ListBox. Ниже приводится полностью код программы, читающей информацию об учетных записях.
‘ Пример 10.9
Imports System.Management Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click
Dim Query As WqlObjectQuery = New WqlObjectQuery( _ "SELECT * FROM Win32_UserAccount WHERE LocalAccount = _ 'true'")
Dim Find As ManagementObjectSearcher = _
New ManagementObjectSearcher(Query)
For Each Mo As ManagementObject In Find.Get() ListBox1.Items.Add("Caption." + Mo("Caption").ToString()) ListBox1.Items.Add("Description." + _ Mo("Description").ToString()) ListBox1.Items.Add("Domain where account belongs." + _ Mo("Domain").ToString())
ListBox1.Items.Add("Account is defined on local machine" _ + Mo("LocalAccount").ToString()) ListBox1.Items.Add("Name of the account " + _ Mo("Name").ToString())
ListBox1.Items.Add("Password can be changed." + _ Mo("PasswordChangeable").ToString()) ListBox1.Items.Add("Password expires." + _ Mo("PasswordExpires").ToString()) ListBox1.Items.Add( _
"Password is required for this account" + _ Mo("PasswordRequired").ToString()) ListBox1.Items.Add("Security identifier (SID)." + _ Mo("SID").ToString()) ListBox1.Items.Add("Type of security identifier." + _
GetSidType(Convert.ToInt32(Mo("SIDType"))).ToString())
127
ListBox1.Items.Add("Status." + Mo("Status").ToString())
ListBox1.Items.Add("-------------")
Next
End Sub
Public Function GetSidType(ByVal type As Integer) As String Select Case type
Case 1
Return "SidTypeUser" Case 2
Return "SidTypeGroup" Case 3
Return "SidTypeDomain" Case 4
Return "SidTypeAlias" Case 5
Return "SidTypeWellKnownGroup" Case 6
Return "SidTypeDeletedAccount" Case 7
Return "SidTypeInvalid" Case 8
Return "SidTypeUnknown" Case 9
Return "SidTypeComputer" Case Else
Return String.Empty End Select
End Function
End Class
10.2. Задания на тему «Анализ системных параметров»
Разработать приложение Windows Forms, которое определяет системные параметры, указанные в соответствующем варианте задания.
Вариант 1. Определить системные дату и время, а также информацию о процессах.
128