Framework
A framework comprises of all different elements that make the production of a software system smoother and less complicated.

BizObject

In object-oriented programming, database elements are witten up as business objects to help control the data from the front end. BizObject is generic code written that can be used for any business object(such as bizPresident, bizParty etc.). Code is written to set up sql adapters and automatically create update, delete, and get sprocs for the passed in business object. Functions are written to check if a row is available, set the primary key value, and much more.

Public Class bizObject(Of T)
Dim sPrimaryTableName As string = ""
Dim sUpdateSproc As string = ""
Dim sDeleteSproc As string = ""
Dim sGetSproc As string = ""
Dim sPrimaryKeyName As string

Dim objAdapter As SqlDataAdapter = New SqlDataAdapter
Dim objTable As DataTable = New DataTable

Public Sub New(TableName As string)
'sUpdateSproc = TableName & "Update"
'sDeleteSproc = TableName & "Delete"
'sGetSproc = TableName & "Get"
sPrimaryKeyName = "i" & TableName & "Id"

objAdapter = mdUtility.SetUpAdapter(TableName)
End Sub

Public Readonly Propery PrimaryDataTableObject As DataTable
Get
Return objTable
End Get
End Propery

Public Sub Load(Id As Long)
With objAdapter
.SelectCommand.Parameters( & sPrimaryKeyName).Value = Id
objTable = mdUtility.GetDataTable(.SelectCommand)
End With
End Sub

Public Sub CreateNew()
If objTable Is Nothing = true OrElse objTable.Columns.Count = 0 Then
Me.Load(0)
End If
If objTable.Rows.Count > 0 Then
objTable.Rows.Clear()
End If
objTable.Rows.Add()
End Sub

Public Sub Save()
mdUtility.UpdateAdapter(objAdapter, objTable)
End Sub

Public Sub Delete()
If objTable.Rows.Count > 0 Then
objTable.Rows(0).Delete()
End If
Me.Save()
End Sub

Public Readonly Propery PrimaryKeyName As string
Get
Return sPrimaryKeyName
End Get
End Propery

Public Function List() As DataTable
Dim objCmd As SqlCommand = objAdapter.SelectCommand
Dim bAll As Boolean = true

With objCmd
.Parameters("bAll").Value = bAll
End With

Dim objTable As DataTable = mdUtility.GetDataTable(objCmd)

Return objTable
End Function

Public Propery FieldValueAsstring(FieldEnum As T) As string
Get
Dim sFieldName As string = FieldEnum.Tostring

Dim sValue As string = ""
If IsRowAvailable(sFieldName, false) = true Then
sValue = CStr(Me.PrimaryDataTableObject.Rows(0).Item(sFieldName) & "")
End If
Return sValue
End Get
Set(value As string)
Dim sFieldName As string = FieldEnum.Tostring
If IsRowAvailable(sFieldName, true) = true Then
Me.PrimaryDataTableObject.Rows(0).Item(sFieldName) = value
End If
End Set
End Propery

Public Propery FieldValueAsInteger(FieldEnum As T) As Integer
Get
Dim sFieldName As string = FieldEnum.Tostring

Dim nValue As Integer = 0
If IsRowAvailable(sFieldName, false) = true Then
nValue = Me.PrimaryDataTableObject.Rows(0).Item(sFieldName)
End If
Return nValue
End Get
Set(value As Integer)
Dim sFieldName As string = FieldEnum.Tostring
If IsRowAvailable(sFieldName, true) = true Then
Me.PrimaryDataTableObject.Rows(0).Item(sFieldName) = value
End If
End Set
End Propery

Private Function GetFieldValueAsLong(FieldName As string) As Long
Dim nValue As Long = 0
If IsRowAvailable(FieldName, false) = true Then
nValue = Me.PrimaryDataTableObject.Rows(0).Item(FieldName)
End If
Return nValue
End Function

Public Propery FieldValueAsLong(FieldEnum As T) As Long
Get
Dim sFieldName As string = FieldEnum.Tostring
Dim nValue As Long = 0
nValue = Me.GetFieldValueAsLong(sFieldName)
Return nValue
End Get
Set(value As Long)
Dim sFieldName As string = FieldEnum.Tostring
If IsRowAvailable(sFieldName, true) = true Then
With Me.PrimaryDataTableObject
If .Columns(sFieldName).Readonly = true Then
.Columns(sFieldName).Readonly = false
End If
.Rows(0).Item(sFieldName) = value
End With
End If
End Set
End Propery

Public Propery FieldValueAsDecimal(FieldEnum As T) As Decimal
Get
Dim sFieldName As string = FieldEnum.Tostring
Dim nValue As Integer = 0
If IsRowAvailable(sFieldName, false) = true Then
nValue = Me.PrimaryDataTableObject.Rows(0).Item(sFieldName)
End If
Return nValue
End Get
Set(value As Decimal)
Dim sFieldName As string = FieldEnum.Tostring
If IsRowAvailable(sFieldName, true) = true Then
Me.PrimaryDataTableObject.Rows(0).Item(sFieldName) = value
End If
End Set
End Propery

Public Propery FieldValueAsBoolean(FieldEnum As T) As Boolean
Get
Dim sFieldName As string = FieldEnum.Tostring
Dim bValue As Boolean = false
If IsRowAvailable(sFieldName, false) = true Then
bValue = Me.PrimaryDataTableObject.Rows(0).Item(sFieldName)
End If
Return bValue
End Get
Set(value As Boolean)
Dim sFieldName As string = FieldEnum.Tostring
If IsRowAvailable(sFieldName, true) = true Then
Me.PrimaryDataTableObject.Rows(0).Item(sFieldName) = value
End If
End Set
End Propery

Public Propery FieldValueAsDate(FieldEnum As T) As Date
Get
Dim sFieldName As string = FieldEnum.Tostring
Dim dValue As Date
If IsRowAvailable(sFieldName, false) = true Then
dValue = Me.PrimaryDataTableObject.Rows(0).Item(sFieldName)
End If
Return dValue
End Get
Set(value As Date)
Dim sFieldName As string = FieldEnum.Tostring
If IsRowAvailable(sFieldName, true) = true Then
Me.PrimaryDataTableObject.Rows(0).Item(sFieldName) = value
End If
End Set
End Propery

Public Readonly Propery PrimaryKeyValue() As Long
Get
Return Me.GetFieldValueAsLong(Me.PrimaryKeyName)
End Get
End Propery

Private Function IsRowAvailable(FieldName As string, ForWrite As Boolean) As Boolean
Dim b As Boolean = false
If IsNumeric(FieldName) = true Then
Throw New CPUException("FieldName cannot be numeric.")
End If

If ForWrite = true Then
If objTable Is Nothing = true OrElse objTable.Rows.Count = 0 Then
Me.CreateNew()
End If
End If

If objTable Is Nothing = false AndAlso objTable.Rows.Count > 0 Then
If objTable.Columns.Contains(FieldName) = false Then
Dim sTableName As string = ""
If objTable.TableName Is Nothing = false Then
sTableName = objTable.TableName
End If
Throw New CPUException(sTableName & " does not contain " & FieldName)
End If
If ForWrite = true Or IsDBNull(objTable.Rows(0).Item(FieldName)) = false Then
b = true
End If
End If
Return b
End Function

End Class