Private Function InitializeDataObject(ByVal tcSql As String) As Boolean Dim loEnumerator As IEnumerator = oParameters.GetEnumerator Dim loParameter As Object cSQL = tcSql oParameters2.Clear() nBackend = oApp.aConnection(nConnectionString, 4) nSQLMode = oApp.aConnection(nConnectionString, 3) ' Different backends handle it differently Select Case nSQLMode ' OleDb Case 1 oDataAdapter = New OleDbDataAdapter oCommand = New OleDbCommand While loEnumerator.MoveNext loParameter = loEnumerator.Current oDataParameter = New OleDbParameter("@" + loParameter(1, 1).ToString, loParameter(1, 2)) oParameters2.Add(oDataParameter) End While ' SQLClient Case 2 oDataAdapter = New SqlDataAdapter oCommand = New SqlCommand While loEnumerator.MoveNext loParameter = loEnumerator.Current oDataParameter = New SqlParameter("@" + loParameter(1, 1).ToString, loParameter(1, 2)) oParameters2.Add(oDataParameter) End While ' ODBC Case 3 oDataAdapter = New OdbcDataAdapter oCommand = New OdbcCommand While loEnumerator.MoveNext loParameter = loEnumerator.Current oDataParameter = New OdbcParameter("@" + loParameter(1, 1).ToString, loParameter(1, 2)) oParameters2.Add(oDataParameter) End While End Select oParameters.Clear() Try oCommand.Connection = oApp.aConnection(nConnectionString, 2) Catch loError As Exception DataError(loError, oApp.Debug(cSQL + ErrorDetail())) End Try Return True End FunctionAs you can see, the first declaration gets a handle on the oParameters object. Once this method is about to be completed, I also issue oParameters.Clear() to clear the container.