Вот выношу на обсуждение класс для доступа, работы и модификации Базы Данных созданной в Access.
Хотелось бы услышать конструктивную критику и пожелания: "какую функциональность еще добавить в класс" и "корректность коментариев".
Это, так сказать, превью версия.
- Код: Выделить всё
Imports System.Data
Imports System.Data.OleDb
''' <summary>
''' Класс для доступа к базе данных Access
''' </summary>
''' <remarks>Класс содержит методы для отображения и модификации данных в таблицах ДБ</remarks>
Public Class AccessToDB
#Region "Переменные в классе"
'declaration
Private dbCon As OleDbConnection
Private dbCmd As OleDbCommand
Private dbDa As OleDbDataAdapter
Private dbCmdBuilder As OleDbCommandBuilder
Private ds As DataSet
Private dr As DataRow
Private dt As DataTable
Private dv As DataView
Private conStr As String
#End Region
#Region "Конструкторы класса"
'constructors
Public Sub New()
conStr = "provider=microsoft.jet.oledb.4.0; data source=" + "D:\vti\Margo\nwind.mdb"
' наверное этот конструктор не нужен, он для определенной в нем базы
' а вот второй конструктор принимает в качестве параметра путь к базе
' значит можно создавать экземпляры класса для разных баз.
End Sub
''' <summary>
'''
''' </summary>
''' <param name="mdb">Полный путь к файлу базы данных Access</param>
''' <remarks>При создании экземпляра класса инициируется соединение с указанной Базой Данных</remarks>
Public Sub New(ByVal mdb As String)
conStr = "provider=microsoft.jet.oledb.4.0; data source=" + mdb
initiateMdb()
End Sub
#End Region
#Region "Методы класса"
'methode
Private Sub initiateMdb()
Try
dbCon = New OleDbConnection()
dbCon.ConnectionString = conStr
dbCmd = New OleDbCommand()
dbCmd.Connection = dbCon
dbDa = New OleDbDataAdapter(dbCmd)
ds = New DataSet()
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при инициации доспупа к БД!")
End Try
End Sub
''' <summary>
''' Инициация таблицы в ДатаСет
''' </summary>
''' <param name="tableName">Имя таблицы, создаваемой в DataSet</param>
''' <param name="sql">SQL-команда для выборки данных из всех или определённых полей для заданной таблицы.</param>
''' <remarks>Здесь используется невыполнимое условие для создания пустой таблицы в ДатаСет, но с полями. ("Шапка" таблицы)</remarks>
Public Sub initiateDataSet(ByVal tableName As String, ByVal sql As String)
sql = sql.Replace(";", "")
dbCmd.CommandText = sql + " where 1=0;"
dbDa.Fill(ds, tableName)
End Sub
''' <summary>
''' Метод для заполнения данными таблицы в ДатаСет
''' </summary>
''' <param name="tableName">Имя таблицы в ДатаСет, в которую будут добавлены данные.</param>
''' <param name="sql">SQL-команда определяющая данные которые будут добавлены.</param>
''' <remarks></remarks>
Public Sub fillDataSet(ByVal tableName As String, ByVal sql As String)
ds.Tables(tableName).Clear()
dbCmd.CommandText = sql
dbDa.Fill(ds, tableName)
End Sub
''' <summary>
''' Метод для заполнения данными таблицы в ДатаСет
''' </summary>
''' <param name="tableName">Имя таблицы в ДатаСет, в которую будут добавлены данные.</param>
''' <param name="sql">SQL-команда определяющая данные которые будут добавлены.</param>
''' <param name="isnew">Значение - False, таблица уже существует и будет очищена от значений.</param>
''' <remarks></remarks>
Public Sub fillDataSet(ByVal tableName As String, ByVal sql As String, ByVal isnew As Boolean)
If isnew = False Then
ds.Tables(tableName).Clear()
End If
dbCmd.CommandText = sql
dbDa.Fill(ds, tableName)
End Sub
''' <summary>
''' Метод выполнения SQL-команды
''' </summary>
''' <param name="sql">SQL-команда для выполнения</param>
''' <remarks></remarks>
Public Sub doNonQuery(ByVal sql As String)
Try
dbCon.Open()
dbCmd.CommandText = sql
dbCmd.ExecuteNonQuery()
dbCon.Close()
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при выполнении запроса к БД!")
Finally
dbCon.Close()
End Try
End Sub
''' <summary>
''' Метод обновления данных таблицы в Базе Данных
''' </summary>
''' <param name="tableName">Имя таблицы в ДатаСет, в которой будут обновлены данные.</param> 'in DataSet of in DataBase???
''' <remarks></remarks>
Public Sub upDateTable(ByVal tableName As String)
Dim count As Integer
dbCmdBuilder = New OleDbCommandBuilder(dbDa)
If ds.HasChanges(DataRowState.Modified) = True Then
dbDa.UpdateCommand = dbCmdBuilder.GetUpdateCommand()
Try
count = dbDa.Update(ds, tableName)
ds.Tables(tableName).AcceptChanges()
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при обновлении таблицы в ДС!")
End Try
End If
End Sub
''' <summary>
''' Функция получения отфильтрованных данных из таблицы в ДатаСете, которые отвечают заданному условию.
''' </summary>
''' <param name="tableName">Имя таблицы в ДатаСет, данные из которой будут фильтроваться.</param>
''' <param name="condition">Условие по которому будут фильтроваться строки в таблице.</param>
''' <returns>DataViev с отфильтрованными по условию строками заданной таблицы в DataSet</returns>
''' <remarks>В качестве условия выступает имя поля в таблице, оператор сравнения или равенства и значение для сравнения.
''' Например: "birthdate>='1/1/1963'" - осуществляется выборка всех строк где значение указанного поля равно или больше
''' указанной даты; "city='London'" - все из Лондона; "title like '%rep%'" - где обращение похоже на "rep".</remarks>
Public Function showData(ByVal tableName As String, ByVal condition As String) As DataView
dv = New DataView()
dv.Table = ds.Tables(tableName)
dv.RowFilter = condition
Return dv
End Function
''' <summary>
''' Функция получения отфильтрованных данных из таблицы в ДатаСете, которые отвечают заданному условию.
''' </summary>
''' <param name="tableName">Имя таблицы в ДатаСет, данные из которой будут фильтроваться.</param>
''' <param name="condition">Условие по которому будут фильтроваться строки в таблице.</param>
''' <param name="fieldName">Имя поля в таблице, по которому выполняется сортировка. Сортировка по возрастанию.</param>
''' <returns>DataViev с отфильтрованными и отсортированными по условиям строками заданной таблицы в DataSet</returns>
''' <remarks></remarks>
Public Function showData(ByVal tableName As String, ByVal condition As String, ByVal fieldName As String) As DataView
dv = New DataView()
dv.Table = ds.Tables(tableName)
dv.RowFilter = condition
dv.Sort = fieldName + " asc"
Return dv
End Function
''' <summary>
''' Метод создания таблицы в Базе Данных
''' </summary>
''' <param name="createStr">SQL команда создания таблицы в Базе Данных</param>
''' <param name="tableName">Имя создаваемой таблицы, для проверки на наличие такой таблицы.</param>
''' <remarks>Если в Базе данных существует такая таблица, то она удаляется.</remarks>
Public Sub createTable(ByVal createStr As String, ByVal tableName As String)
Try
dbCon.Open()
dbCmd.CommandText = createStr
dbCmd.ExecuteNonQuery()
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при создании таблицы в ДБ!")
Finally
dbCon.Close()
End Try
End Sub
#End Region
#Region "Свойства класса"
'property
Public ReadOnly Property status() As ConnectionState
Get
Return dbCon.State
End Get
End Property
Public ReadOnly Property myDs() As DataSet
Get
Return ds
End Get
End Property
#End Region
End Class
Заранее спасибо.
Всего самого