TemplateParameterCollection.vb

Imports System
Imports System.Data
Imports System.Collections
Imports System.Globalization

Namespace DotNetDataProviderTemplate
  '*
  '* Because IDataParameterCollection is primarily an IList,
  '* the sample can use an existing class for most of the implementation.
  '*
  Public Class TemplateParameterCollection
    Inherits ArrayList
    Implements IDataParameterCollection
    
    Public Overloads Default Property Item(ByVal index As String) As Object Implements IDataParameterCollection.Item
      Get
        Return Me(IndexOf(index))
      End Get
      Set
        Me(IndexOf(index)) = value
      End Set
    End Property

    Public Overloads Function Contains(ByVal parameterName As String) As Boolean Implements IDataParameterCollection.Contains
              Return (-1 <> IndexOf(parameterName))
    End Function

    Public Overloads Function IndexOf(ByVal parameterName As String) As Integer Implements IDataParameterCollection.IndexOf
      Dim index As Integer = 0
      Dim item As TemplateParameter

      For Each item in Me 
        If 0 = _cultureAwareCompare(item.ParameterName, parameterName) Then
          Return index
        End If
        index += 1
      Next
      Return -1
    End Function

    Public Overloads Sub RemoveAt(parameterName As String) Implements IDataParameterCollection.RemoveAt
      RemoveAt(IndexOf(parameterName))
    End Sub

    Public Overrides Overloads Function Add(value As Object) As Integer
      Return Add(CType(value, TemplateParameter))
    End Function

    Public Overloads Function Add(value As TemplateParameter) As Integer
      If CType(value, TemplateParameter).ParameterName <> Nothing Then
        Return MyBase.Add(value)
      Else
        Throw New ArgumentException("parameter must be named")
      End If
    End Function

    Public Overloads Function Add(parameterName As String, type As DbType) As Integer
      Return Add(new TemplateParameter(parameterName, type))
    End Function

    Public Overloads Function Add(parameterName As String, value As Object) As Integer
      Return Add(new TemplateParameter(parameterName, value))
    End Function

    Public Overloads Function Add(parameterName As String, dbType As DbType, sourceColumn As String) As Integer
      Return Add(New TemplateParameter(parameterName, dbType, sourceColumn))
    End Function

    Private Function _cultureAwareCompare(ByVal strA As String, ByVal strB As String) As Integer
      Return CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.IgnoreKanaType Or CompareOptions.IgnoreWidth Or CompareOptions.IgnoreCase)
    End Function
  End Class
End Namespace