Imports System.Data Imports System.Xml Public Class clsHymnTuneName Implements ICloneable Private mguidHymnTuneNameID As Guid Private mstrHymnTuneName As String Private mguidHymnTuneID As Guid Private m_OtherHymnTuneNamesForTune As SortedList Private m_blnObjectAlreadyPersisted As Boolean Public Sub New() mguidHymnTuneNameID = Guid.NewGuid mstrHymnTuneName = "" mguidHymnTuneID = Guid.NewGuid m_OtherHymnTuneNamesForTune = New SortedList m_blnObjectAlreadyPersisted = False End Sub Public Sub New(ByVal lstrHymnTuneName As String) Dim ldbcmdCommand As New SqlClient.SqlCommand ldbcmdCommand.CommandText = "sel_hymn_tune_name_by_name" ldbcmdCommand.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneName As New SqlClient.SqlParameter prmHymnTuneName.ParameterName = "@hymn_tune_name" prmHymnTuneName.SqlDbType = SqlDbType.VarChar prmHymnTuneName.Size = MyGlobals.HYMN_TUNE_NAME_SIZE prmHymnTuneName.Value = lstrHymnTuneName ldbcmdCommand.Parameters.Add(prmHymnTuneName) Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then Dim ldbrwRow As DataRow ldbrwRow = ldbdsHymnTuneNames.Tables(0).Rows(0) mguidHymnTuneNameID = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) mstrHymnTuneName = CType(ldbrwRow.Item("hymn_tune_name"), String) mguidHymnTuneID = CType(ldbrwRow.Item("hymn_tune_id"), Guid) m_OtherHymnTuneNamesForTune = GetOtherTuneNamesForTune(mguidHymnTuneNameID) ldbdsHymnTuneNames.Clear() m_blnObjectAlreadyPersisted = True Else ldbdsHymnTuneNames.Clear() mguidHymnTuneNameID = Guid.NewGuid mstrHymnTuneName = lstrHymnTuneName.Trim mguidHymnTuneID = Guid.NewGuid m_OtherHymnTuneNamesForTune = New SortedList m_blnObjectAlreadyPersisted = False End If End Sub Public Sub New(ByVal lguidHymnTuneNameID As Guid) LoadByHymnTuneNameId(lguidHymnTuneNameID, True) End Sub Protected Sub New(ByVal lguidHymnTuneNameID As Guid, ByVal lblnLoadOtherTuneNamesForTune As Boolean) LoadByHymnTuneNameId(lguidHymnTuneNameID, lblnLoadOtherTuneNamesForTune) End Sub Public Sub New(ByVal ldbrwRow As DataRow) PopulateFromDBRow(ldbrwRow, True) m_blnObjectAlreadyPersisted = True End Sub Protected Sub New(ByVal ldbrwRow As DataRow, ByVal lblnLoadOtherTuneNamesForTune As Boolean) PopulateFromDBRow(ldbrwRow, lblnLoadOtherTuneNamesForTune) m_blnObjectAlreadyPersisted = True End Sub Private Sub LoadByHymnTuneNameId(ByVal lguidHymnTuneNameID As Guid, ByVal lblnLoadOtherTuneNamesForTune As Boolean) mguidHymnTuneNameID = lguidHymnTuneNameID Dim ldbcmdCommand As New SqlClient.SqlCommand ldbcmdCommand.CommandText = "sel_hymn_tune_name" ldbcmdCommand.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameID As New SqlClient.SqlParameter prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameID.Size = 5 prmHymnTuneNameID.Value = lguidHymnTuneNameID ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then Dim ldbrwRow As DataRow ldbrwRow = ldbdsHymnTuneNames.Tables(0).Rows(0) PopulateFromDBRow(ldbrwRow, lblnLoadOtherTuneNamesForTune) m_blnObjectAlreadyPersisted = True If lblnLoadOtherTuneNamesForTune Then MyGlobals.AddCachedObject(Me, Me.HymnTuneID.ToString) End If End If ldbdsHymnTuneNames.Clear() End Sub Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow, ByVal lblnLoadOtherTuneNamesForTune As Boolean) mguidHymnTuneNameID = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) mstrHymnTuneName = CType(ldbrwRow.Item("hymn_tune_name"), String) mguidHymnTuneID = CType(ldbrwRow.Item("hymn_tune_id"), Guid) If lblnLoadOtherTuneNamesForTune Then m_OtherHymnTuneNamesForTune = GetOtherTuneNamesForTune(mguidHymnTuneNameID) Else m_OtherHymnTuneNamesForTune = New SortedList End If If lblnLoadOtherTuneNamesForTune Then MyGlobals.AddCachedObject(Me, Me.HymnTuneID.ToString) End If End Sub Public Sub Refresh() LoadByHymnTuneNameId(mguidHymnTuneNameID, True) End Sub Public Function Delete() As Boolean MyGlobals.RemoveCachedObject(Me.HymnTuneNameID.ToString) Try Dim ldbcmdCommand As New SqlClient.SqlCommand ldbcmdCommand.CommandText = "del_hymn_tune_name" ldbcmdCommand.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameID As New SqlClient.SqlParameter prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameID.Size = 5 prmHymnTuneNameID.Value = mguidHymnTuneNameID ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) If lintRowsAffected > 0 Then m_blnObjectAlreadyPersisted = False Return True Else Return False End If Catch Return False End Try End Function Public Function Save() As Boolean Try MyGlobals.AddCachedObject(Me, Me.HymnTuneNameID.ToString) If m_blnObjectAlreadyPersisted Then Dim objPersisted_OtherHymnTuneNamesForTune As SortedList = GetOtherTuneNamesForTune(mguidHymnTuneNameID) Dim objAddedOtherHymnTuneNamesForTune As SortedList = Nothing Dim objDroppedOtherHymnTuneNamesForTune As SortedList = Nothing Dim objRemainingOtherHymnTuneNamesForTune As SortedList = Nothing GetAddedDroppedRemainingOtherHymnTuneNamesForTune(objPersisted_OtherHymnTuneNamesForTune, m_OtherHymnTuneNamesForTune, objAddedOtherHymnTuneNamesForTune, objDroppedOtherHymnTuneNamesForTune, objRemainingOtherHymnTuneNamesForTune) 'If alternate tune names were droped from the list, then we need to change 'the current hymn tune name and all alternate hymn tune names that remained 'on the list to a new hymn tune ID If objDroppedOtherHymnTuneNamesForTune.Count > 0 Then 'Get a new Hymn Tune ID for THIS hymn tune name mguidHymnTuneID = Guid.NewGuid Dim objDictionaryEntry As DictionaryEntry Dim objOtherHymnTuneName As clsHymnTuneName 'Update the hymn tune ID for all hymn tune names which should REMAIN 'matched with THIS hymn tune name For Each objDictionaryEntry In objRemainingOtherHymnTuneNamesForTune objOtherHymnTuneName = CType(objDictionaryEntry.Value, clsHymnTuneName) objOtherHymnTuneName.HymnTuneID = mguidHymnTuneID Dim ldbcmdCommandSaveOtherRemaining As New SqlClient.SqlCommand ldbcmdCommandSaveOtherRemaining.CommandText = "upd_hymn_tune_name_with_tune_id" ldbcmdCommandSaveOtherRemaining.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameIDSaveOtherRemaining As New SqlClient.SqlParameter prmHymnTuneNameIDSaveOtherRemaining.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameIDSaveOtherRemaining.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameIDSaveOtherRemaining.Size = 5 prmHymnTuneNameIDSaveOtherRemaining.Value = objOtherHymnTuneName.HymnTuneNameID ldbcmdCommandSaveOtherRemaining.Parameters.Add(prmHymnTuneNameIDSaveOtherRemaining) ' Set up parameter for stored procedure Dim prmHymnTuneIDSaveOtherRemaining As New SqlClient.SqlParameter prmHymnTuneIDSaveOtherRemaining.ParameterName = "@hymn_tune_id" prmHymnTuneIDSaveOtherRemaining.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneIDSaveOtherRemaining.Size = 5 prmHymnTuneIDSaveOtherRemaining.Value = mguidHymnTuneID ldbcmdCommandSaveOtherRemaining.Parameters.Add(prmHymnTuneIDSaveOtherRemaining) Dim lintRowsAffectedSaveOtherRemaining As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandSaveOtherRemaining) Next End If 'If alternate hymn tune names were added, we need to change the hymn tune ID for all 'hymn tune names that were added (along with THEIR matches) to the hymn tune ID of 'the current hymn tune name If objAddedOtherHymnTuneNamesForTune.Count > 0 Then Dim objDictionaryEntry As DictionaryEntry Dim objOtherHymnTuneName As clsHymnTuneName For Each objDictionaryEntry In objAddedOtherHymnTuneNamesForTune objOtherHymnTuneName = CType(objDictionaryEntry.Value, clsHymnTuneName) objOtherHymnTuneName.HymnTuneID = mguidHymnTuneID Dim ldbcmdCommandSaveOtherAdded As New SqlClient.SqlCommand ldbcmdCommandSaveOtherAdded.CommandText = "upd_hymn_tune_name_with_tune_id_with_matches" ldbcmdCommandSaveOtherAdded.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameIDSaveOtherAdded As New SqlClient.SqlParameter prmHymnTuneNameIDSaveOtherAdded.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameIDSaveOtherAdded.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameID.Size = 5 prmHymnTuneNameIDSaveOtherAdded.Value = objOtherHymnTuneName.HymnTuneNameID ldbcmdCommandSaveOtherAdded.Parameters.Add(prmHymnTuneNameIDSaveOtherAdded) ' Set up parameter for stored procedure Dim prmHymnTuneIDSaveOtherAdded As New SqlClient.SqlParameter prmHymnTuneIDSaveOtherAdded.ParameterName = "@hymn_tune_id" prmHymnTuneIDSaveOtherAdded.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneID.Size = 5 prmHymnTuneIDSaveOtherAdded.Value = mguidHymnTuneID ldbcmdCommandSaveOtherAdded.Parameters.Add(prmHymnTuneIDSaveOtherAdded) Dim lintRowsAffectedSaveOtherAdded As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandSaveOtherAdded) Next End If Dim ldbcmdCommandUpdateThis As New SqlClient.SqlCommand ldbcmdCommandUpdateThis.CommandText = "upd_hymn_tune_name" ldbcmdCommandUpdateThis.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameIDUpdateThis As New SqlClient.SqlParameter prmHymnTuneNameIDUpdateThis.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameIDUpdateThis.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameIDUpdateThis.Size = 5 prmHymnTuneNameIDUpdateThis.Value = mguidHymnTuneNameID ldbcmdCommandUpdateThis.Parameters.Add(prmHymnTuneNameIDUpdateThis) ' Set up parameter for stored procedure Dim prmHymnTuneNameUpdateThis As New SqlClient.SqlParameter prmHymnTuneNameUpdateThis.ParameterName = "@hymn_tune_name" prmHymnTuneNameUpdateThis.SqlDbType = SqlDbType.VarChar prmHymnTuneNameUpdateThis.Size = MyGlobals.HYMN_TUNE_NAME_SIZE prmHymnTuneNameUpdateThis.Value = mstrHymnTuneName ldbcmdCommandUpdateThis.Parameters.Add(prmHymnTuneNameUpdateThis) ' Set up parameter for stored procedure Dim prmHymnTuneIDUpdateThis As New SqlClient.SqlParameter prmHymnTuneIDUpdateThis.ParameterName = "@hymn_tune_id" prmHymnTuneIDUpdateThis.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneIDUpdateThis.Size = 5 prmHymnTuneIDUpdateThis.Value = mguidHymnTuneID ldbcmdCommandUpdateThis.Parameters.Add(prmHymnTuneIDUpdateThis) Dim lintRowsAffectedUpdateThis As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandUpdateThis) If lintRowsAffectedUpdateThis > 0 Then Return True Else Return False End If Else 'If alternate tune names listed, grab hymn tune ID from first one listed, 'and update tune ID for all others, including THIS object If m_OtherHymnTuneNamesForTune.Count > 0 Then Dim objguidFirstTuneID As Guid Dim blnFirstAlternameTuneName As Boolean = True Dim objDictionaryEntry As DictionaryEntry Dim objOtherHymnTuneName As clsHymnTuneName For Each objDictionaryEntry In m_OtherHymnTuneNamesForTune objOtherHymnTuneName = CType(objDictionaryEntry.Value, clsHymnTuneName) If blnFirstAlternameTuneName Then blnFirstAlternameTuneName = False objguidFirstTuneID = objOtherHymnTuneName.HymnTuneID mguidHymnTuneID = objguidFirstTuneID Else objOtherHymnTuneName.HymnTuneID = objguidFirstTuneID Dim ldbcmdCommandUpdateOtherAdding As New SqlClient.SqlCommand ldbcmdCommandUpdateOtherAdding.CommandText = "upd_hymn_tune_name_with_tune_id_with_matches" ldbcmdCommandUpdateOtherAdding.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameIDUpdateOtherAdding As New SqlClient.SqlParameter prmHymnTuneNameIDUpdateOtherAdding.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameIDUpdateOtherAdding.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameIDUpdateOtherAdding.Size = 5 prmHymnTuneNameIDUpdateOtherAdding.Value = objOtherHymnTuneName.HymnTuneNameID ldbcmdCommandUpdateOtherAdding.Parameters.Add(prmHymnTuneNameIDUpdateOtherAdding) ' Set up parameter for stored procedure Dim prmHymnTuneIDUpdateOtherAdding As New SqlClient.SqlParameter prmHymnTuneIDUpdateOtherAdding.ParameterName = "@hymn_tune_id" prmHymnTuneIDUpdateOtherAdding.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneIDUpdateOtherAdding.Size = 5 prmHymnTuneIDUpdateOtherAdding.Value = objguidFirstTuneID ldbcmdCommandUpdateOtherAdding.Parameters.Add(prmHymnTuneIDUpdateOtherAdding) Dim lintRowsAffectedUpdateOtherAdding As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandUpdateOtherAdding) End If Next End If Dim ldbcmdCommandAddThis As New SqlClient.SqlCommand ldbcmdCommandAddThis.CommandText = "ins_hymn_tune_name" ldbcmdCommandAddThis.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameIDAddThis As New SqlClient.SqlParameter prmHymnTuneNameIDAddThis.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameIDAddThis.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameID.Size = 5 prmHymnTuneNameIDAddThis.Value = mguidHymnTuneNameID ldbcmdCommandAddThis.Parameters.Add(prmHymnTuneNameIDAddThis) ' Set up parameter for stored procedure Dim prmHymnTuneNameAddThis As New SqlClient.SqlParameter prmHymnTuneNameAddThis.ParameterName = "@hymn_tune_name" prmHymnTuneNameAddThis.SqlDbType = SqlDbType.VarChar prmHymnTuneNameAddThis.Size = MyGlobals.HYMN_TUNE_NAME_SIZE prmHymnTuneNameAddThis.Value = mstrHymnTuneName ldbcmdCommandAddThis.Parameters.Add(prmHymnTuneNameAddThis) ' Set up parameter for stored procedure Dim prmHymnTuneIDAddThis As New SqlClient.SqlParameter prmHymnTuneIDAddThis.ParameterName = "@hymn_tune_id" prmHymnTuneIDAddThis.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneIDAddThis.Size = 5 prmHymnTuneIDAddThis.Value = mguidHymnTuneID ldbcmdCommandAddThis.Parameters.Add(prmHymnTuneIDAddThis) Dim lintRowsAffectedAddThis As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandAddThis) If lintRowsAffectedAddThis > 0 Then m_blnObjectAlreadyPersisted = True Return True Else Return False End If End If Catch Return False End Try End Function Public Function DuplicateExists(ByVal lstrHymnTuneNameToCheck As String) As Boolean Try Dim ldbcmdCommand As New SqlClient.SqlCommand ldbcmdCommand.CommandText = "sel_hymn_tune_name_by_name" ldbcmdCommand.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneName As New SqlClient.SqlParameter prmHymnTuneName.ParameterName = "@hymn_tune_name" prmHymnTuneName.SqlDbType = SqlDbType.VarChar prmHymnTuneName.Size = MyGlobals.HYMN_TUNE_NAME_SIZE prmHymnTuneName.Value = lstrHymnTuneNameToCheck ldbcmdCommand.Parameters.Add(prmHymnTuneName) Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then Dim ldbrwRow As DataRow For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows If mguidHymnTuneNameID.Equals(CType(ldbrwRow.Item("hymn_tune_name_id"), Guid)) Then 'OK Else ldbdsHymnTuneNames.Clear() Return True End If Next End If ldbdsHymnTuneNames.Clear() Return False Catch Return False End Try End Function Public Property HymnTuneNameID() As Guid Get Return mguidHymnTuneNameID End Get Set(ByVal lguidValue As Guid) mguidHymnTuneNameID = lguidValue End Set End Property Public Property HymnTuneName() As String Get Return mstrHymnTuneName End Get Set(ByVal sValue As String) mstrHymnTuneName = sValue.Trim End Set End Property Public Property HymnTuneID() As Guid Get Return mguidHymnTuneID End Get Set(ByVal lguidValue As Guid) mguidHymnTuneID = lguidValue End Set End Property Public ReadOnly Property OtherHymnTuneNamesForTune() As SortedList Get Return m_OtherHymnTuneNamesForTune End Get End Property Protected WriteOnly Property OtherHymnTuneNamesForTuneForCloning() As SortedList Set(ByVal Value As SortedList) m_OtherHymnTuneNamesForTune = Value End Set End Property Public Sub AddAlternateHymnTuneName(ByVal lobjHymnTuneName As clsHymnTuneName) AddAlternateTuneNameToList(lobjHymnTuneName, m_OtherHymnTuneNamesForTune) End Sub Public Sub RemoveAlternateHymnTuneName(ByVal lobjHymnTuneName As clsHymnTuneName) RemoveAlternateTuneNameFromList(lobjHymnTuneName, m_OtherHymnTuneNamesForTune) End Sub Public Sub RemoveAlternateHymnTuneName(ByVal lstrHymnTuneName As String) RemoveAlternateTuneNameFromList(lstrHymnTuneName, m_OtherHymnTuneNamesForTune) End Sub Public Property ItemAlreadyPersisted() As Boolean Get Return m_blnObjectAlreadyPersisted End Get Set(ByVal Value As Boolean) m_blnObjectAlreadyPersisted = Value End Set End Property Public Function Clone() As Object Implements ICloneable.Clone Dim lobjReturnValue As New clsHymnTuneName lobjReturnValue.HymnTuneNameID = Me.HymnTuneNameID lobjReturnValue.HymnTuneName = Me.HymnTuneName lobjReturnValue.HymnTuneID = Me.HymnTuneID lobjReturnValue.OtherHymnTuneNamesForTuneForCloning = CType(Me.OtherHymnTuneNamesForTune.Clone, SortedList) lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted Return lobjReturnValue End Function Public Function StateIsIdentical(ByVal lobjOtherHymnTuneName As clsHymnTuneName) As Boolean If Me.HymnTuneNameID.Equals(lobjOtherHymnTuneName.HymnTuneNameID) _ AndAlso Me.HymnTuneName = lobjOtherHymnTuneName.HymnTuneName _ AndAlso Me.HymnTuneID.Equals(lobjOtherHymnTuneName.HymnTuneID) Then If Me.OtherHymnTuneNamesForTune.Count <> lobjOtherHymnTuneName.OtherHymnTuneNamesForTune.Count Then Return False End If 'We have the same number of alternate tune names. 'Just need to check from one side to see if all are on the other ' - If none were added, and the number is the same, then none could have been deleted Dim objDictionaryEntry As DictionaryEntry Dim objMeOtherHymnTuneNameForTune As clsHymnTuneName For Each objDictionaryEntry In Me.OtherHymnTuneNamesForTune objMeOtherHymnTuneNameForTune = CType(objDictionaryEntry.Value, clsHymnTuneName) If Not lobjOtherHymnTuneName.OtherHymnTuneNamesForTune.ContainsKey(objMeOtherHymnTuneNameForTune.HymnTuneName) Then Return False End If Next Return True Else Return False End If End Function Public Function Validate(ByRef lstrErrorString As String) As Boolean lstrErrorString = "" If Me.HymnTuneName.Length = 0 Then lstrErrorString = "Hymn Tune Name is required" Return False End If If Me.DuplicateExists(Me.HymnTuneName) Then lstrErrorString = "Given Hymn Tune Name already exists" Return False End If Return True End Function Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean Dim lblnReturnValue As Boolean lblnReturnValue = True lstrReferencedByString = "" Dim ldbcmdCommand As New SqlClient.SqlCommand ldbcmdCommand.CommandText = "sel_hymn_tune_name_isreferenced" ldbcmdCommand.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameID As New SqlClient.SqlParameter prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameID.Size = 5 prmHymnTuneNameID.Value = mguidHymnTuneNameID ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then lblnReturnValue = False Dim ldbrwRow As DataRow For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows If Not ldbrwRow.IsNull("table_referencing_instance") Then If lstrReferencedByString.Length = 0 Then lstrReferencedByString = CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" Else lstrReferencedByString = lstrReferencedByString + " and " + CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" End If End If Next End If ldbdsHymnTuneNames.Clear() Return lblnReturnValue End Function Public Overrides Function ToString() As String Return mstrHymnTuneName End Function Public Function GetOtherTuneNamesForTune(ByVal lguidHymnTuneNameId As Guid) As SortedList Dim objSortedListToReturn As New SortedList Try Dim ldbcmdCommand As New SqlClient.SqlCommand ldbcmdCommand.CommandText = "sel_hymn_tune_name_others_by_hymn_tune_name_id" ldbcmdCommand.CommandType = CommandType.StoredProcedure ' Set up parameter for stored procedure Dim prmHymnTuneNameID As New SqlClient.SqlParameter prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier 'prmHymnTuneNameID.Size = 5 prmHymnTuneNameID.Value = lguidHymnTuneNameId ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then Dim ldbrwRow As DataRow Dim lobjHymnTuneName As clsHymnTuneName For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows lguidHymnTuneNameId = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) lobjHymnTuneName = New clsHymnTuneName(lguidHymnTuneNameId, False) AddAlternateTuneNameToList(lobjHymnTuneName, objSortedListToReturn) Next End If ldbdsHymnTuneNames.Clear() Return objSortedListToReturn Catch Return objSortedListToReturn End Try End Function Private Sub AddAlternateTuneNameToList(ByVal lobjHymnTuneName As clsHymnTuneName, ByRef lobjSortedListToReturn As SortedList) If lobjSortedListToReturn.ContainsKey(lobjHymnTuneName.HymnTuneName) Then Return End If lobjSortedListToReturn.Add(lobjHymnTuneName.HymnTuneName, lobjHymnTuneName) End Sub Private Sub RemoveAlternateTuneNameFromList(ByVal lobjHymnTuneName As clsHymnTuneName, ByRef lobjSortedListToReturn As SortedList) If lobjSortedListToReturn.ContainsKey(lobjHymnTuneName.HymnTuneName) Then lobjSortedListToReturn.Remove(lobjHymnTuneName.HymnTuneName) End If End Sub Private Sub RemoveAlternateTuneNameFromList(ByVal lstrHymnTuneName As String, ByRef lobjSortedListToReturn As SortedList) If lobjSortedListToReturn.ContainsKey(lstrHymnTuneName) Then lobjSortedListToReturn.Remove(lstrHymnTuneName) End If End Sub Private Sub GetAddedDroppedRemainingOtherHymnTuneNamesForTune(ByVal objPersisted_OtherHymnTuneNamesForTune As SortedList, ByVal objCurrentOtherHymnTuneNamesForTune As SortedList, ByRef objAddedOtherHymnTuneNamesForTune As SortedList, ByRef objDroppedOtherHymnTuneNamesForTune As SortedList, ByRef objRemainingOtherHymnTuneNamesForTune As SortedList) Dim objDictionaryEntry As DictionaryEntry Dim objHymnTuneNameToCheck As clsHymnTuneName Dim strHymnTuneNameToCheck As String objAddedOtherHymnTuneNamesForTune = New SortedList objDroppedOtherHymnTuneNamesForTune = New SortedList objRemainingOtherHymnTuneNamesForTune = New SortedList For Each objDictionaryEntry In objPersisted_OtherHymnTuneNamesForTune objHymnTuneNameToCheck = CType(objDictionaryEntry.Value, clsHymnTuneName) strHymnTuneNameToCheck = objHymnTuneNameToCheck.HymnTuneName If objCurrentOtherHymnTuneNamesForTune.ContainsKey(strHymnTuneNameToCheck) Then objRemainingOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) Else objDroppedOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) End If Next For Each objDictionaryEntry In objCurrentOtherHymnTuneNamesForTune objHymnTuneNameToCheck = CType(objDictionaryEntry.Value, clsHymnTuneName) strHymnTuneNameToCheck = objHymnTuneNameToCheck.HymnTuneName If objPersisted_OtherHymnTuneNamesForTune.ContainsKey(strHymnTuneNameToCheck) Then 'Not necessary to save to REMAINING list, as it should already be there from above 'objRemainingOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) Else objAddedOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) End If Next End Sub Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) objXMLWriter.WriteStartElement("HymnTuneName") objXMLWriter.WriteElementString("HymnTuneNameID", Me.HymnTuneNameID.ToString) objXMLWriter.WriteElementString("HymnTuneID", Me.HymnTuneID.ToString) objXMLWriter.WriteElementString("HymnTuneName", Me.HymnTuneName) objXMLWriter.WriteEndElement() End Sub Public Shared Function GetAllHymnTuneNames() As System.Collections.Generic.List(Of clsHymnTuneName) Dim lguidHymnTuneNameID As Guid Dim ldbcmdCommand As New SqlClient.SqlCommand Dim lobjHymnTuneName As clsHymnTuneName Dim lcolHymnTuneNames As New System.Collections.Generic.List(Of clsHymnTuneName) ldbcmdCommand.CommandText = "sel_hymn_tune_name_all" ldbcmdCommand.CommandType = CommandType.StoredProcedure Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then Dim ldbrwRow As DataRow For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows lguidHymnTuneNameID = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) If MyGlobals.CachedObjectExists(lguidHymnTuneNameID.ToString) Then lobjHymnTuneName = CType(MyGlobals.CachedObjectRetrieve(lguidHymnTuneNameID.ToString), clsHymnTuneName) Else 'lobjHymnTuneName = New clsHymnTuneName(lguidHymnTuneNameID) lobjHymnTuneName = New clsHymnTuneName(ldbrwRow) End If lcolHymnTuneNames.Add(lobjHymnTuneName) Next End If ldbdsHymnTuneNames.Clear() Return lcolHymnTuneNames End Function Public Shared Sub AddAllHymnTuneNamesToCache() If MyGlobals.g_objObjectTypesCached.Contains("HymnTuneNames") = False Then GetAllHymnTuneNames() MyGlobals.g_objObjectTypesCached.Add("HymnTuneNames") End If End Sub End Class