Thoscellen c66626ff3a init
2020-05-16 17:38:46 +02:00

943 lines
41 KiB
VB.net

Imports System.Data.SqlClient
Imports System.IO
Public Class SQLManager
Shared DBConnexion As SqlConnection
Shared Sub New()
Dim fileName As String = "DBString.ini"
Dim exePath As String = Application.StartupPath()
Dim filePath As String = exePath & "\" & fileName
If File.Exists(filePath) Then
Dim txtReader As StreamReader
Dim StrContents As String
Try
txtReader = New StreamReader(filePath)
StrContents = txtReader.ReadLine()
Catch ex As Exception
MsgBox("The application was unable to load the database connexion string from the file : " & vbNewLine & filePath & vbNewLine & "Please check if the database is launched and loaded, and the initialisation file containt a operationnal connexion string." & vbNewLine & "The program will close.", MsgBoxStyle.OkOnly & MsgBoxStyle.Critical, "Impossible to connect to the database")
End
End Try
Try
DBConnexion = New SqlConnection(StrContents)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly & MsgBoxStyle.Critical)
End Try
Else
Dim txtReader As StreamWriter
Try
File.Create(filePath)
txtReader = New StreamWriter(filePath)
txtReader.WriteLine("Data Source=TIMONIUM\SQLEXPRESS8;Initial Catalog=Creche;Integrated Security=True;Pooling=False")
Catch ex As Exception
MsgBox(ex.Message & vbNewLine & "The program will close.", MsgBoxStyle.OkOnly & MsgBoxStyle.Critical, "Impossible to start")
End
End Try
MsgBox("The application was unable to find the connexion string file at " & vbNewLine & filePath & vbNewLine & "Please check if the fill exists and contains a valid database connexion string.", MsgBoxStyle.OkOnly & MsgBoxStyle.Critical, "File not found")
End
End If
DBConnexion.Open()
End Sub
' ----- DB Methods for Children -----'
''' <summary>
''' Get a all information about a Child whose his ID is passed as a parameter
''' </summary>
''' <param name="id">The id of the child to get from the database</param>
''' <returns>a Child as complete as possible</returns>
''' <remarks></remarks>
Public Function getChildByID(id As Integer) As Child
Dim aChild As Child = Nothing
Dim request As SqlCommand = New SqlCommand()
Dim results As SqlDataReader
Dim FK_Parent1id As UInteger
Dim FK_Parent2id As UInteger
request.Connection = DBConnexion
request.CommandText = "SELECT * FROM Child WHERE idChild = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
results = request.ExecuteReader()
'While (results.Read())
' Console.WriteLine(results.GetInt32(2))
'End While
If (results.HasRows) Then
results.Read()
If results.IsDBNull(0) Then
FK_Parent1id = 0
Else
FK_Parent1id = results.GetInt32(0)
End If
If results.IsDBNull(1) Then
FK_Parent2id = 0
Else
FK_Parent2id = results.GetInt32(1)
End If
aChild = New Child(results.GetInt32(2))
aChild.firstname = results.GetString(3)
aChild.lastname = results.GetString(4)
aChild.gender = results.GetBoolean(5)
aChild.bornDate = results.GetDateTime(6)
aChild.address = results.GetString(7)
results.Close()
Else
Throw New IndexOutOfRangeException("The specified index does not exist on the database")
End If
If FK_Parent1id <> 0 Then
aChild.parent1 = Me.getParentByID(FK_Parent1id)
End If
If FK_Parent2id <> 0 Then
aChild.parent2 = Me.getParentByID(FK_Parent2id)
End If
aChild.meet = Me.getMeetByChildId(id)
'request.CommandText = "SELECT * FROM Parent WHERE idParent = @id"
'request.Parameters("@id").Value = FK_Parent1id
'results = request.ExecuteReader()
'If (results.HasRows) Then
' results.Read()
' Dim parent1 As Parent = New Parent(results.GetInt32(0))
' parent1.firstname = results.GetString(1)
' parent1.lastname = results.GetString(2)
' parent1.gender = results.GetBoolean(3)
' parent1.phone = results.GetString(4)
' parent1.address = results.GetString(5)
' aChild.parent1 = parent1
' results.Close()
' Console.WriteLine(parent1.toString())
'Else
' aChild.parent1 = Nothing
'End If
'request.CommandText = "SELECT * FROM Parent WHERE idParent = @id"
'request.Parameters("@id").Value = FK_Parent2id
'results = request.ExecuteReader()
'If (results.HasRows) Then
' results.Read()
' Dim parent2 As Parent = New Parent(results.GetInt32(0))
' parent2.firstname = results.GetString(1)
' parent2.lastname = results.GetString(2)
' parent2.gender = results.GetBoolean(3)
' parent2.phone = results.GetString(4)
' parent2.address = results.GetString(5)
' aChild.parent2 = parent2
' results.Close()
' Console.WriteLine(parent2.toString())
'Else
' aChild.parent2 = Nothing
'End If
If Not results.IsClosed Then results.Close()
Return aChild
End Function
''' <summary>
''' Send requests to the database to compose a list of all the children
''' </summary>
''' <returns>A list of all the children</returns>
''' <remarks></remarks>
Public Function getChildren() As List(Of Child)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT idChild FROM Child"
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim allID As List(Of Integer) = New List(Of Integer)
While (results.Read())
allID.Add(results.GetInt32(0))
End While
results.Close()
Dim AllChildren As List(Of Child) = New List(Of Child)
For Each id As Integer In allID
AllChildren.Add(getChildByID(id))
Next
Return AllChildren
End Function
''' <summary>
''' Add a Child to the database with all needed data
''' </summary>
''' <param name="aChild">The child to add to the database</param>
''' <remarks>Currently, it only add a new children, no parents, no meet.</remarks>
Public Function addChild(aChild As Child) As Integer
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "INSERT INTO Child (FK_idParent1, FK_idParent2, ChildFirstName, ChildLastName, ChildGender, ChildBornDate, ChildCareAddress) VALUES (@idp1, @idp2, @chfn, @chln, @chgd, @chbd, @chds)"
If Not aChild.parent1 Is Nothing Then
request.Parameters.Add("@idp1", SqlDbType.Int).Value = aChild.parent1.id
Else
request.Parameters.Add("@idp1", SqlDbType.Int).Value = DBNull.Value
End If
If Not aChild.parent2 Is Nothing Then
request.Parameters.Add("@idp2", SqlDbType.Int).Value = aChild.parent2.id
Else
request.Parameters.Add("@idp2", SqlDbType.Int).Value = DBNull.Value
End If
request.Parameters.Add("@chfn", SqlDbType.NVarChar).Value = aChild.firstname
request.Parameters.Add("@chln", SqlDbType.NVarChar).Value = aChild.lastname
request.Parameters.Add("@chgd", SqlDbType.Bit).Value = aChild.gender
request.Parameters.Add("@chbd", SqlDbType.Date).Value = aChild.bornDate
request.Parameters.Add("@chds", SqlDbType.NVarChar).Value = aChild.address
request.ExecuteReader().Close()
'If Not aChild.meet Is Nothing And aChild.meet.id = 0 Then
' addMeet(aChild.meet, aChild.id)
'End If
request.CommandText = "SELECT idChild FROM Child where ChildFirstName = @chfn AND ChildLastName = @chln AND ChildGender = @chgd AND ChildBornDate = @chbd AND ChildCareAddress = @chds"
Dim results As SqlDataReader
results = request.ExecuteReader()
results.Read()
Dim idChild As Integer = results.GetInt32(0)
results.Close()
Return idChild
End Function
''' <summary>
''' Edit the specified Child in the database
''' </summary>
''' <param name="aChild">The child to edit (The most important is it's ID)</param>
''' <remarks></remarks>
Public Sub editChild(aChild As Child)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "UPDATE Child SET FK_idParent1 = @idp1, FK_idParent2 = @idp2, ChildFirstName = @chfn, ChildLastName = @chln, ChildGender = @chgd, ChildBornDate = @chbd, ChildCareAddress = @chds WHERE idChild = @chid"
request.Parameters.Add("@chid", SqlDbType.Int).Value = aChild.id
If Not aChild.parent1 Is Nothing Then
request.Parameters.Add("@idp1", SqlDbType.Int).Value = aChild.parent1.id
Else
request.Parameters.Add("@idp1", SqlDbType.Int).Value = DBNull.Value
End If
If Not aChild.parent2 Is Nothing Then
request.Parameters.Add("@idp2", SqlDbType.Int).Value = aChild.parent2.id
Else
request.Parameters.Add("@idp2", SqlDbType.Int).Value = DBNull.Value
End If
request.Parameters.Add("@chfn", SqlDbType.NVarChar).Value = aChild.firstname
request.Parameters.Add("@chln", SqlDbType.NVarChar).Value = aChild.lastname
request.Parameters.Add("@chgd", SqlDbType.Bit).Value = aChild.gender
request.Parameters.Add("@chbd", SqlDbType.Date).Value = aChild.bornDate
request.Parameters.Add("@chds", SqlDbType.NVarChar).Value = aChild.address
request.ExecuteReader().Close()
End Sub
''' <summary>
''' Delete the Child in the Database based on his id.
''' </summary>
''' <param name="id">The id of the Child to delete</param>
''' <remarks>The Child is deleted with the corresponding meet.</remarks>
Public Sub deleteChildByID(id As Integer)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
' Delete the associated Meet of the child.
request.CommandText = "SELECT idMeet FROM Meet WHERE FK_idChild = @chidmeet"
request.Parameters.Add("@chidmeet", SqlDbType.Int).Value = id
Dim result As SqlDataReader = request.ExecuteReader()
Dim idmeet As Integer = Nothing
If result.HasRows() Then
result.Read()
idmeet = result.GetInt32(0)
result.Close()
End If
' if there is no meet asociated, we can delete child safely from de db.
' else, we delete meeet first.
If Not idmeet = Nothing Then
deleteMeet(idmeet)
End If
If Not result.IsClosed Then result.Close()
' Then delete the child from the database.
request = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "DELETE FROM Child WHERE idChild = @chid"
request.Parameters.Add("@chid", SqlDbType.Int).Value = id
request.ExecuteReader.Close()
End Sub
Function getChildByMeetID(id As Integer) As Child
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT FK_idChild FROM Meet WHERE idMeet = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim aChild As Child = Nothing
If results.HasRows Then
results.Read()
Dim idChild As UInteger = results.GetValue(0)
results.Close()
aChild = getChildByID(idChild)
End If
If Not results.IsClosed Then results.Close()
Return aChild
End Function
' ----- DB Methods for Parents -----'
''' <summary>
''' Get all information about a PArent whose his ID is passed as a parameter
''' </summary>
''' <param name="id">The id of the Parent to get from the database</param>
''' <returns>a Parent</returns>
''' <remarks></remarks>
Public Function getParentByID(id As Integer) As Parent
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT * FROM Parent WHERE idParent = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim aParent As Parent = Nothing
If results.HasRows Then
results.Read()
aParent = New Parent(results.GetInt32(0))
aParent.firstname = results.GetString(1)
aParent.lastname = results.GetString(2)
aParent.phone = results.GetString(4)
aParent.gender = results.GetBoolean(3)
aParent.address = results.GetString(5)
results.Close()
End If
If Not results.IsClosed Then results.Close()
Return aParent
End Function
''' <summary>
''' Send requests to the database to compose a list of all the parents
''' </summary>
''' <returns>The list containing all parents</returns>
''' <remarks></remarks>
Public Function getParents() As List(Of Parent)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT idParent FROM Parent"
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim allID As List(Of Integer) = New List(Of Integer)
While (results.Read())
allID.Add(results.GetInt32(0))
End While
results.Close()
Dim AllParent As List(Of Parent) = New List(Of Parent)
For Each id As Integer In allID
AllParent.Add(getParentByID(id))
Next
Return AllParent
End Function
''' <summary>
''' Get a list of children for the parent where the id is passed as a parameter
''' </summary>
''' <param name="id">the id of the parent</param>
''' <returns>a list of childrens of this parent</returns>
''' <remarks></remarks>
Public Function getChildenOf(id As Integer) As List(Of Child)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT idChild FROM Child WHERE FK_idParent1 = @id OR FK_idParent2 = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim allId As List(Of Integer) = New List(Of Integer)
While results.Read
allId.Add(results.GetInt32(0))
End While
results.Close()
Dim theChildren As List(Of Child) = New List(Of Child)
For Each Childid As Integer In allId
Dim aChild As Child = getChildByID(Childid)
theChildren.Add(aChild)
Next
Return theChildren
End Function
''' <summary>
''' Add a Parent to the database with all needed data
''' </summary>
''' <param name="parent">the parent to add into the database</param>
''' <remarks></remarks>
Public Function addParent(parent As Parent) As Integer
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "INSERT INTO Parent (ParentFirstName, ParentLastName, ParentGender, ParentPhone, ParentAddress) VALUES (@pfn, @pln, @pgd, @pph, @pds)"
request.Parameters.Add("@pfn", SqlDbType.NVarChar).Value = parent.firstname
request.Parameters.Add("@pln", SqlDbType.NVarChar).Value = parent.lastname
request.Parameters.Add("@pgd", SqlDbType.Bit).Value = parent.gender
request.Parameters.Add("@pph", SqlDbType.NVarChar).Value = parent.phone
request.Parameters.Add("@pds", SqlDbType.NVarChar).Value = parent.address
request.ExecuteReader().Close()
request.CommandText = "SELECT idParent FROM Parent WHERE ParentFirstName = @pfn AND ParentLastName = @pln AND ParentGender = @pgd AND ParentPhone = @pph AND ParentAddress = @pds"
Dim results As SqlDataReader
results = request.ExecuteReader()
results.Read()
Dim idParent As Integer = results.GetInt32(0)
results.Close()
Return idParent
End Function
''' <summary>
''' Edit the specified Parent in the database
''' </summary>
''' <param name="parent">The parent to edit in the database (The most important is ot's ID)</param>
''' <remarks></remarks>
Public Sub editParent(parent As Parent)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "UPDATE Parent SET ParentFirstName = @pfn, ParentLastName = @pln, ParentGender = @pgd, ParentPhone = @pph, ParentAddress = @pds WHERE idParent = @pid"
request.Parameters.Add("@pid", SqlDbType.Int).Value = parent.id
request.Parameters.Add("@pfn", SqlDbType.NVarChar).Value = parent.firstname
request.Parameters.Add("@pln", SqlDbType.NVarChar).Value = parent.lastname
request.Parameters.Add("@pgd", SqlDbType.Bit).Value = parent.gender
request.Parameters.Add("@pph", SqlDbType.NVarChar).Value = parent.phone
request.Parameters.Add("@pds", SqlDbType.NVarChar).Value = parent.address
request.ExecuteReader().Close()
End Sub
''' <summary>
''' Delete the Parent in the Database based on the id.
''' </summary>
''' <param name="id">The id of the Parent to delete</param>
''' <remarks>Delete only the Parent without nothing more</remarks>
Public Sub deleteParentByID(id As Integer)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT idChild FROM Child WHERE FK_idParent1 = @pid OR FK_idParent2 = @pid "
request.Parameters.Add("@pid", SqlDbType.Int).Value = id
Dim result As SqlDataReader = request.ExecuteReader
If result.HasRows Then
Dim allChildID As List(Of Integer) = New List(Of Integer)
While result.Read
allChildID.Add(result.GetInt32(0))
End While
result.Close()
Dim allChild As List(Of Child) = New List(Of Child)
For Each idChild As Integer In allChildID
allChild.Add(getChildByID(idChild))
Next
For Each Child As Child In allChild
If Not Child.parent1 Is Nothing AndAlso Child.parent1.id = id Then
request = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "UPDATE Child SET FK_idParent1 = @pfk WHERE idChild = @cid"
request.Parameters.Add("@pfk", SqlDbType.Int).Value = DBNull.Value
request.Parameters.Add("@cid", SqlDbType.Int).Value = Child.id
request.ExecuteReader.Close()
End If
If Not Child.parent2 Is Nothing AndAlso Child.parent2.id = id Then
request = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "UPDATE Child SET FK_idParent2 = @pfk WHERE idChild = @cid"
request.Parameters.Add("@pfk", SqlDbType.Int).Value = DBNull.Value
request.Parameters.Add("@cid", SqlDbType.Int).Value = Child.id
request.ExecuteReader.Close()
End If
Next
End If
request = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "DELETE FROM Parent WHERE idParent = @pid"
request.Parameters.Add("@pid", SqlDbType.Int).Value = id
request.ExecuteReader.Close()
End Sub
' ----- DB Methods for Babysitter -----'
''' <summary>
''' Get all information about a Babysitter whose his ID is passed as a parameter
''' </summary>
''' <param name="id">The id of the child to get from the database</param>
''' <returns>A Babysitter as complete as possible</returns>
''' <remarks>If the babysitter have Meets the function also these meets into the Babysitters objet, or Nohting insead.</remarks>
Public Function getBabysitterByID(id As Integer) As BabySitter
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT * FROM Babysitter WHERE idBS = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim aSB As BabySitter
If results.HasRows Then
results.Read()
aSB = New BabySitter(results.GetInt32(3))
aSB.firstname = results.GetString(4)
aSB.lastname = results.GetString(5)
aSB.gender = results.GetBoolean(6)
aSB.address = results.GetString(7)
aSB.phone1 = results.GetString(8)
Dim nbMeet1 As Integer
Dim nbMeet2 As Integer
Dim nbMeet3 As Integer
If Not results.IsDBNull(0) Then
nbMeet1 = results.GetInt32(0)
Else
nbMeet1 = Nothing
End If
If Not results.IsDBNull(1) Then
nbMeet2 = results.GetInt32(1)
Else
nbMeet2 = Nothing
End If
If Not results.IsDBNull(2) Then
nbMeet3 = results.GetInt32(2)
Else
nbMeet3 = Nothing
End If
If Not results.IsDBNull(9) Then
aSB.phone2 = results.GetString(9)
Else
aSB.phone2 = Nothing
End If
results.Close()
If Not nbMeet1 = Nothing Then
aSB.meet1 = Me.getMeetByID(nbMeet1)
End If
If Not nbMeet2 = Nothing Then
aSB.meet2 = Me.getMeetByID(nbMeet2)
End If
If Not nbMeet3 = Nothing Then
aSB.meet3 = Me.getMeetByID(nbMeet3)
End If
Else
Throw New IndexOutOfRangeException("The specified index does not exist on the database")
End If
Return aSB
End Function
''' <summary>
''' Send requests to the database to compose a liste of all the babysitters
''' </summary>
''' <returns>A List(of BabySitters)</returns>
''' <remarks>Use getBabysitter(id)</remarks>
Public Function getBabysitters() As List(Of BabySitter)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT idBS FROM Babysitter"
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim allID As List(Of Integer) = New List(Of Integer)
While (results.Read())
allID.Add(results.GetInt32(0))
End While
results.Close()
Dim AllBS As List(Of BabySitter) = New List(Of BabySitter)
For Each id As Integer In allID
Try
AllBS.Add(getBabysitterByID(id))
Catch ex As SqlException
Console.WriteLine("SQLManager")
Console.WriteLine(ex.Message)
End Try
Next
Return AllBS
End Function
''' <summary>
''' Get a babysitter based on the Meet ID provided as a parameter
''' </summary>
''' <param name="id">The ID of the meet</param>
''' <returns>A babysitter if a meet is founded in the Database, or Nothing else.</returns>
''' <remarks>If a meet has no babysitter in the database, the meet is immediately deleted.</remarks>
Public Function getBabysitterByMeetID(id As Integer) As BabySitter
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT * FROM Babysitter WHERE FK_idMeet1 = @id OR FK_idMeet2 = @id OR FK_idMeet3 = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim aSB As BabySitter = Nothing
If results.HasRows Then
results.Read()
aSB = New BabySitter(results.GetInt32(3))
aSB.firstname = results.GetString(4)
aSB.lastname = results.GetString(5)
aSB.gender = results.GetBoolean(6)
aSB.address = results.GetString(7)
aSB.phone1 = results.GetString(8)
If Not results.IsDBNull(9) Then
aSB.phone2 = results.GetString(9)
Else
aSB.phone2 = Nothing
End If
results.Close()
End If
Return aSB
End Function
''' <summary>
''' Get all availables babysitters from the databases.
''' </summary>
''' <returns>z List(of Babysitter)</returns>
''' <remarks>Babysitters that have less than 3 meets</remarks>
Public Function getAvailableBabysitters() As List(Of BabySitter)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT idBS FROM Babysitter WHERE FK_idMeet1 IS NULL OR FK_idMeet2 IS NULL OR FK_idMeet3 IS NULL"
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim allID As List(Of Integer) = New List(Of Integer)
While (results.Read())
allID.Add(results.GetInt32(0))
End While
results.Close()
Dim AllBS As List(Of BabySitter) = New List(Of BabySitter)
For Each id As Integer In allID
Try
AllBS.Add(getBabysitterByID(id))
Catch ex As SqlException
Console.WriteLine("SQLManager")
Console.WriteLine(ex.Message)
End Try
Next
Return AllBS
End Function
''' <summary>
''' Add a Babysitter to the database.
''' </summary>
''' <param name="aBS"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function addBabysitter(aBS As BabySitter) As Integer
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "INSERT INTO Babysitter (BSFirstName, BSLastName, BSGender, BSAddress, BSPhone1, BSPhone2) VALUES (@bsfn, @bsln, @bsgd, @bsds, @bsp1, @bsp2)"
request.Parameters.Add("@bsfn", SqlDbType.NVarChar).Value = aBS.firstname
request.Parameters.Add("@bsln", SqlDbType.NVarChar).Value = aBS.lastname
request.Parameters.Add("@bsgd", SqlDbType.Bit).Value = aBS.gender
request.Parameters.Add("@bsp1", SqlDbType.NVarChar).Value = aBS.phone1
request.Parameters.Add("@bsds", SqlDbType.NVarChar).Value = aBS.address
If Not aBS.phone2 Is Nothing Then
request.Parameters.Add("@bsp2", SqlDbType.NVarChar).Value = aBS.phone2
Else
request.Parameters.Add("@bsp2", SqlDbType.NVarChar).Value = DBNull.Value
End If
request.ExecuteReader().Close()
request.CommandText = "SELECT idBS FROM babysitter WHERE BSFirstName = @bsfn AND BSLastName = @bsln AND BSGender = @bsgd AND BSAddress = @bsds"
Dim results As SqlDataReader
results = request.ExecuteReader()
results.Read()
Dim idBS As Integer = results.GetInt32(0)
results.Close()
Return idBS
End Function
''' <summary>
''' Edit a BabySitter with the givent babysitter
''' </summary>
''' <param name="aBS">The babysitter with new information. The ID of the babysitter is mandatory.</param>
''' <remarks>The meet is not managed here. see updateBabysitterMeets</remarks>
Public Sub editBabysitter(aBS As BabySitter)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "UPDATE Babysitter SET BSFirstName = @bsfn, BSLastName = @bsln, BSGender = @bsg, BSAddress = @bsad, BSPhone1 = @bsph1, BSPhone2 = @bsph2 WHERE idBS = @bsid"
'If Not aBS.meet1 Is Nothing Then
' request.Parameters.Add("@bsfk1", SqlDbType.Int).Value = aBS.meet1.id
'End If
'If Not aBS.meet2 Is Nothing Then
' request.Parameters.Add("@fkbs2", SqlDbType.Int).Value = aBS.meet2.id
'End If
'If Not aBS.meet3 Is Nothing Then
' request.Parameters.Add("@fkbs3", SqlDbType.Int).Value = aBS.meet3.id
'End If
request.Parameters.Add("@bsfn", SqlDbType.NVarChar).Value = aBS.firstname
request.Parameters.Add("@bsln", SqlDbType.NVarChar).Value = aBS.lastname
request.Parameters.Add("@bsg", SqlDbType.Bit).Value = aBS.gender
request.Parameters.Add("@bsad", SqlDbType.NVarChar).Value = aBS.address
request.Parameters.Add("@bsph1", SqlDbType.NVarChar).Value = aBS.phone1
If Not aBS.phone2 Is Nothing Then
request.Parameters.Add("@bsph2", SqlDbType.NVarChar).Value = aBS.phone2
Else
request.Parameters.Add("@bsph2", SqlDbType.NVarChar).Value = DBNull.Value
End If
request.Parameters.Add("@bsid", SqlDbType.Int).Value = aBS.id
request.ExecuteReader().Close()
End Sub
''' <summary>
''' Update the relationshop between a babysitter and a meet. Many parameters can be added, making this method powerfull :
''' - The meet and a babysitter to add : The meet is associated to the babysitter (BSID) in one of the 3 avalaible meeting (BSPod).
''' - The meet and a babysitter to remove : The meet can be nothing, one of the 3 babisitter's meets is removed.
''' - The meet and both. The meet is removed from one babyssiter and then added to another babysitter.
''' </summary>
''' <param name="meetNumber">The ID of the meet</param>
''' <param name="BSIDAdd">The ID of the babyssiter who recieved the meet. This parameter is mandatory with the next one.</param>
''' <param name="BSPosAdd">The firts avalaible empty meet of the babysitter where the meet Id will be placed. This parameter is mandatory with the previous one.</param>
''' <param name="BSIDRemove">The ID of the babyssiter where the meet is to remove. This parameter is mandatory with the next one.</param>
''' <param name="BSPosRemove">The firts avalaible empty meet of the babysitter where the meet Id will be removed. This parameter is mandatory with the previous one.</param>
''' <remarks>TO get the first empty meet of a babysitter, see getFirstFreeMeetOf method</remarks>
Public Sub updateBabysitterMeets(meetNumber As UShort, Optional BSIDAdd As Integer = 0, Optional BSPosAdd As Integer = 0, Optional BSIDRemove As Integer = 0, Optional BSPosRemove As Integer = 0)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
If BSPosRemove >= 1 And BSPosRemove <= 4 Then
Select Case BSPosRemove
'Case 1
' request.CommandText = "UPDATE Babysitter SET FK_idMeet1 = @bsfkR WHERE idBS = @bsidR"
Case 2
request.CommandText = "UPDATE Babysitter SET FK_idMeet1 = @bsfkR WHERE idBS = @bsidR"
Case 3
request.CommandText = "UPDATE Babysitter SET FK_idMeet2 = @bsfkR WHERE idBS = @bsidR"
Case 4
request.CommandText = "UPDATE Babysitter SET FK_idMeet3 = @bsfkR WHERE idBS = @bsidR"
End Select
'request.Parameters.Add("@bsPosR", SqlDbType.Int).Value = BSPosRemove
request.Parameters.Add("@bsfkR", SqlDbType.Int).Value = DBNull.Value
request.Parameters.Add("@bsidR", SqlDbType.Int).Value = BSIDRemove
request.ExecuteReader().Close()
End If
If BSPosAdd >= 1 And BSPosAdd <= 3 Then
Select Case BSPosAdd
Case 1
request.CommandText = "UPDATE Babysitter SET FK_idMeet1 = @bsfkA WHERE idBS = @bsidA"
Case 2
request.CommandText = "UPDATE Babysitter SET FK_idMeet2 = @bsfkA WHERE idBS = @bsidA"
Case 3
request.CommandText = "UPDATE Babysitter SET FK_idMeet3 = @bsfkA WHERE idBS = @bsidA"
End Select
'request.Parameters.Add("@bsPosA", SqlDbType.Int).Value = BSPosAdd
request.Parameters.Add("@bsfkA", SqlDbType.Int).Value = meetNumber
request.Parameters.Add("@bsidA", SqlDbType.Int).Value = BSIDAdd
request.ExecuteReader().Close()
End If
End Sub
''' <summary>
''' Delete a babysitter and associated Meets from the database
''' </summary>
''' <param name="id">The id of the babysiter to delete</param>
''' <remarks>Be aware that some child will loose their Meet.</remarks>
Public Sub deleteBabysitterByID(id As Integer)
Dim aBS As BabySitter = getBabysitterByID(id)
If Not aBS.meet1 Is Nothing Then deleteMeet(aBS.meet1.id)
If Not aBS.meet2 Is Nothing Then deleteMeet(aBS.meet2.id)
If Not aBS.meet3 Is Nothing Then deleteMeet(aBS.meet3.id)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "DELETE FROM Babysitter WHERE idBS = @BSid"
request.Parameters.Add("@BSid", SqlDbType.Int).Value = id
request.ExecuteReader.Close()
End Sub
'----- DB Methods for Meet -----'
''' <summary>
''' Get a meet by its ID
''' </summary>
''' <param name="id"></param>
''' <returns>a meet or nothing</returns>
''' <remarks></remarks>
Public Function getMeetByID(id As Integer) As Meet
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT * FROM Meet WHERE idMeet = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim aMeet As Meet = Nothing
If (results.HasRows) Then
results.Read()
aMeet = New Meet(results.GetInt32(1))
aMeet.monday = results.GetBoolean(2)
aMeet.tuesday = results.GetBoolean(3)
aMeet.wednesday = results.GetBoolean(4)
aMeet.thursday = results.GetBoolean(5)
aMeet.friday = results.GetBoolean(6)
aMeet.saturday = results.GetBoolean(7)
aMeet.sunday = results.GetBoolean(8)
results.Close()
End If
If Not results.IsClosed Then results.Close()
Return aMeet
End Function
''' <summary>
''' Get a meet for a given Child ID
''' </summary>
''' <param name="id">The Id of the Child associated with the meet</param>
''' <returns>The corresponding meet or nothing if the child has no meet</returns>
''' <remarks></remarks>
Public Function getMeetByChildId(id As Integer) As Meet
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "SELECT * FROM Meet WHERE FK_idChild = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
Dim aMeet As Meet = Nothing
If (results.HasRows) Then
results.Read()
aMeet = New Meet(results.GetInt32(1))
aMeet.monday = results.GetBoolean(2)
aMeet.tuesday = results.GetBoolean(3)
aMeet.wednesday = results.GetBoolean(4)
aMeet.thursday = results.GetBoolean(5)
aMeet.friday = results.GetBoolean(6)
aMeet.saturday = results.GetBoolean(7)
aMeet.sunday = results.GetBoolean(8)
results.Close()
End If
If Not results.IsClosed Then results.Close()
Return aMeet
End Function
''' <summary>
''' Edit this meet by updating his values
''' </summary>
''' <param name="aMeet">The meet to edit with new modifications</param>
''' <remarks>The Meet Id is mandatory</remarks>
Public Sub editMeet(aMeet As Meet)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "UPDATE Meet SET Monday = @mon, Tuesday = @tue, Wednesday = @wed, Thursday = @thr, Friday = @fri, Saturday = @sat, Sunday = @sun WHERE idMeet = @idm"
request.Parameters.Add("@mon", SqlDbType.Bit).Value = aMeet.monday
request.Parameters.Add("@tue", SqlDbType.Bit).Value = aMeet.tuesday
request.Parameters.Add("@wed", SqlDbType.Bit).Value = aMeet.wednesday
request.Parameters.Add("@thr", SqlDbType.Bit).Value = aMeet.thursday
request.Parameters.Add("@fri", SqlDbType.Bit).Value = aMeet.friday
request.Parameters.Add("@sat", SqlDbType.Bit).Value = aMeet.saturday
request.Parameters.Add("@sun", SqlDbType.Bit).Value = aMeet.sunday
request.Parameters.Add("@idm", SqlDbType.Int).Value = aMeet.id
request.ExecuteReader().Close()
End Sub
''' <summary>
''' Add a meet to the database.
''' </summary>
''' <param name="aMeet">The meet to add</param>
''' <param name="childID">The id of the child associated</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function addMeet(aMeet As Meet, childID As Integer) As Integer
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
request.CommandText = "INSERT INTO Meet (FK_idChild, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) VALUES (@idc, @mon, @tue, @wed, @thr, @fri, @sat, @sun)"
request.Parameters.Add("@mon", SqlDbType.Bit).Value = aMeet.monday
request.Parameters.Add("@tue", SqlDbType.Bit).Value = aMeet.tuesday
request.Parameters.Add("@wed", SqlDbType.Bit).Value = aMeet.wednesday
request.Parameters.Add("@thr", SqlDbType.Bit).Value = aMeet.thursday
request.Parameters.Add("@fri", SqlDbType.Bit).Value = aMeet.friday
request.Parameters.Add("@sat", SqlDbType.Bit).Value = aMeet.saturday
request.Parameters.Add("@sun", SqlDbType.Bit).Value = aMeet.sunday
request.Parameters.Add("@idc", SqlDbType.Int).Value = childID
request.ExecuteReader().Close()
request.CommandText = "SELECT idMeet FROM Meet WHERE FK_idChild = @idch"
request.Parameters.Add("@idch", SqlDbType.Int).Value = childID
Dim results As SqlDataReader
results = request.ExecuteReader()
results.Read()
Dim idBS As Integer = results.GetInt32(0)
results.Close()
Return idBS
End Function
''' <summary>
''' Delete the Meet where the id is given. Also update the associated Babysitter
''' </summary>
''' <param name="id">The id of the meet to delete</param>
''' <remarks>Be aware of the difference between the Child ID (Foreing Key) and the Meet ID.</remarks>
Public Sub deleteMeet(id As Integer)
Dim request As SqlCommand = New SqlCommand()
request.Connection = DBConnexion
' First wee search wich babysitter has the meet.
request.CommandText = "SELECT FK_idMeet1, FK_idMeet2, FK_idMeet3, idBS FROM Babysitter WHERE FK_idMeet1 = @id OR FK_idMeet2 = @id OR FK_idMeet3 = @id"
request.Parameters.Add("@id", SqlDbType.Int).Value = id
Dim results As SqlDataReader
results = request.ExecuteReader()
' Then we delete this meet from it.
'If there is no bs associated with this meet, we can delete it from the db
If results.HasRows Then
results.Read()
Dim idBS As Integer = results.GetInt32(3)
Dim wantedID As UShort = 0
If Not results.IsDBNull(0) AndAlso id = results.GetInt32(0) Then
wantedID = 1
ElseIf Not results.IsDBNull(1) AndAlso id = results.GetInt32(1) Then
wantedID = 2
ElseIf Not results.IsDBNull(2) AndAlso id = results.GetInt32(2) Then
wantedID = 3
End If
results.Close()
Select Case wantedID
Case 1
request.CommandText = "UPDATE Babysitter SET FK_idMeet1 = @bsfk WHERE idBS = @bsid"
Case 2
request.CommandText = "UPDATE Babysitter SET FK_idMeet2 = @bsfk WHERE idBS = @bsid"
Case 3
request.CommandText = "UPDATE Babysitter SET FK_idMeet3 = @bsfk WHERE idBS = @bsid"
End Select
request.Parameters.Add("@bsfk", SqlDbType.Int).Value = DBNull.Value
request.Parameters.Add("@bsid", SqlDbType.Int).Value = idBS
request.ExecuteReader().Close()
End If
'Finaly, the meet has no more constraint in the database, we can safely delete it.
request.CommandText = "DELETE FROM Meet WHERE idMeet = @chid"
request.Parameters.Add("@chid", SqlDbType.Int).Value = id
request.ExecuteReader.Close()
End Sub
End Class