Imports System
Imports System.Data
Namespace DotNetDataProviderTemplate
Public Class TemplateCommand
Implements IDbCommand
Private m_connection As TemplateConnection
Private m_txn As TemplateTransaction
Private m_sCmdText As String
Private m_updatedRowSource As UpdateRowSource = UpdateRowSource.None
Private m_parameters As TemplateParameterCollection = New TemplateParameterCollection
' Implement the default constructor here.
Public Sub New()
MyBase.New
End Sub
' Implement other constructors here.
Public Sub New(ByVal cmdText As String)
MyBase.New
m_sCmdText = cmdText
End Sub
Public Sub New(ByVal cmdText As String, connection As TemplateConnection)
MyBase.New
m_sCmdText = cmdText
m_connection = connection
End Sub
Public Sub New(ByVal cmdText As String, connection As TemplateConnection, txn As TemplateTransaction)
MyBase.New
m_sCmdText = cmdText
m_connection = connection
m_txn = txn
End Sub
'****
'* IMPLEMENT THE REQUIRED PROPERTIES.
'****
Public Property CommandText As String Implements IDbCommand.CommandText
Get
Return m_sCmdText
End Get
Set
m_sCmdText = value
End Set
End Property
Public Property CommandTimeout As Integer Implements IDbCommand.CommandTimeout
'*
' * The sample does not support a command time-out. As a result,
' * for the get, zero is returned because zero indicates an indefinite
' * time-out period. For the set, throw an exception.
'*
Get
Return 0
End Get
Set
If value <> 0 Then Throw New NotSupportedException
End Set
End Property
Public Property CommandType As CommandType Implements IDbCommand.CommandType
'*
'* The sample only supports CommandType.Text.
'*
Get
Return CommandType.Text
End Get
Set
If value <> CommandType.Text Then Throw New NotSupportedException
End Set
End Property
Public Property Connection As IDbConnection Implements IDbCommand.Connection
'**
'* The user should be able to set or change the connection at
'* any time.
'*
Get
Return m_connection
End Get
Set
'*
'* Because the connection is associated with the transaction,
'* setthe transaction object to return a null reference if the connection
'* is reset.
'*
If Not m_connection Is value Then Me.Transaction = Nothing
m_connection = CType(value, TemplateConnection)
End Set
End Property
Protected ReadOnly Property Parameters As IDataParameterCollection Implements IDbCommand.Parameters
Get
Return CType(m_parameters, TemplateParameterCollection)
End Get
End Property
Public Property Transaction As IDbTransaction Implements IDbCommand.Transaction
'*
'* Set the transaction. Consider additional steps to ensure that the transaction
'* is compatible with the connection, because the two are usually linked.
'*
Get
Return m_txn
End Get
Set
m_txn = CType(value, TemplateTransaction)
End Set
End Property
Public Property UpdatedRowSource As UpdateRowSource Implements IDbCommand.UpdatedRowSource
Get
Return m_updatedRowSource
End Get
Set
m_updatedRowSource = value
End Set
End Property
'****
'* IMPLEMENT THE REQUIRED METHODS.
'****
Public Sub Cancel() Implements IDbCommand.Cancel
' The sample does not support canceling a command
' once it has been initiated.
Throw New NotSupportedException()
End Sub
Public Function CreateParameter() As IDbDataParameter Implements IDbCommand.CreateParameter
Return CType(New TemplateParameter(), IDbDataParameter)
End Function
Public Function ExecuteNonQuery() As Integer Implements IDbCommand.ExecuteNonQuery
'*
'* ExecuteNonQuery is intended for commands that do
'* not return results, instead returning only the number
'* of records affected.
'*
' There must be a valid and open connection.
If m_connection Is Nothing Or m_connection.State <> ConnectionState.Open Then
Throw New InvalidOperationException("Connection must valid and open")
End If
' Execute the command.
Dim resultSet As SampleDb.SampleDbResultSet
m_connection.SampleDb.Execute(m_sCmdText, resultSet)
' Return the number of records affected.
Return resultSet.recordsAffected
End Function
Public Overloads Function ExecuteReader() As IDataReader Implements IDbCommand.ExecuteReader
'*
'* ExecuteReader should retrieve results from the data source
'* and return a DataReader that allows the user to process
'* the results.
'*
' There must be a valid and open connection.
If m_connection Is Nothing Or m_connection.State <> ConnectionState.Open Then
Throw New InvalidOperationException("Connection must valid and open")
End If
' Execute the command.
Dim resultSet As SampleDb.SampleDbResultSet = New SampleDb.SampleDbResultSet
m_connection.SampleDb.Execute(m_sCmdText, resultSet)
Return New TemplateDataReader(resultSet)
End Function
Public Overloads Function ExecuteReader(behavior As CommandBehavior) As IDataReader Implements IDbCommand.ExecuteReader
'*
'* ExecuteReader should retrieve results from the data source
'* and return a DataReader that allows the user to process
'* the results.
'*
' There must be a valid and open connection.
If m_connection Is Nothing Or m_connection.State <> ConnectionState.Open Then
Throw New InvalidOperationException("Connection must valid and open")
End If
' Execute the command.
Dim resultSet As SampleDb.SampleDbResultSet = New SampleDb.SampleDbResultSet
m_connection.SampleDb.Execute(m_sCmdText, resultSet)
'*
'* The only CommandBehavior option supported by this
'* sample is the automatic closing of the connection
'* when the user is done with the reader.
'*
If behavior = CommandBehavior.CloseConnection Then
Return New TemplateDataReader(resultSet, m_connection)
Else
Return New TemplateDataReader(resultSet)
End If
End Function
Public Function ExecuteScalar() As Object Implements IDbCommand.ExecuteScalar
'*
'* ExecuteScalar assumes that the command will return a single
'* row with a single column, or if more rows/columns are returned
'* it will return the first column of the first row.
'*
' There must be a valid and open connection.
If m_connection Is Nothing Or m_connection.State <> ConnectionState.Open Then
Throw New InvalidOperationException("Connection must valid and open")
End If
' Execute the command.
Dim resultSet As SampleDb.SampleDbResultSet = New SampleDb.SampleDbResultSet
m_connection.SampleDb.Execute(m_sCmdText, resultSet)
' Return the first column of the first row.
' Return a null reference if there is no data.
If resultSet.data.Length = 0 Then Return Nothing
Return resultSet.data(0, 0)
End Function
Public Sub Prepare() Implements IDbCommand.Prepare
' The sample Prepare is a no-op.
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
Me.Dispose(True)
System.GC.SuppressFinalize(Me)
End Sub
Private Sub Dispose(disposing As Boolean)
'
' Dispose of the object and perform any cleanup.
'
End Sub
End Class
End Namespace