Hi,
I try to make for codes to fix bugs, and you must verify the logics inside.
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Xml
Imports System.Collections
Imports System.Diagnostics
Namespace DataService
Public Class DataServer
Private myConnectionString As String
Private myConnection As SqlConnection
Private myCommand As SqlCommand
Private myDataReader As SqlDataReader
Private myXmlReader As XmlReader
Private mySqlDataAdapter As SqlDataAdapter
Private myDataSet As DataSet
Private privateParameterList As ArrayList = New ArrayList()
Private Const privateExceptionMessage As String = "Data Application Error"
Public Sub New(ByVal ConnectionString As String)
myConnectionString = ConnectionString
End Sub
Public Function returnDataSet(ByVal SPName As String, Optional ByVal TableName As String = Nothing) As DataSet
Dim privateUsedParameter As GeneralParameter
Dim privateParameter As SqlParameter
Dim usedEnumerator As IEnumerator = privateParameterList.GetEnumerator()
Try
myConnection = New SqlConnection(myConnectionString)
Dim PrivateDataSet As New DataSet()
myCommand = New SqlCommand(SPName, myConnection)
myCommand.CommandType = CommandType.StoredProcedure
Do While (usedEnumerator.MoveNext())
privateUsedParameter = Nothing
privateUsedParameter = usedEnumerator.Current
privateParameter = GeneralParameter.ConvertToSqlParameters(privateUsedParameter)
myCommand.Parameters.Add(privateParameter)
Loop
mySqlDataAdapter = New SqlDataAdapter(myCommand)
If TableName = Nothing Then
mySqlDataAdapter.Fill(PrivateDataSet)
Else
mySqlDataAdapter.Fill(PrivateDataSet, TableName)
End If
Return PrivateDataSet
Catch ExceptionObject As Exception
Throw New Exception(privateExceptionMessage, ExceptionObject)
Finally
myConnection.Close()
End Try
End Function
Public Function runTransaction(ByVal SPName As String) As ArrayList
Dim privateUsedParameter As GeneralParameter
Dim privateParameter As SqlParameter
Dim usedEnumerator As IEnumerator = privateParameterList.GetEnumerator()
Dim outputParameters As New ArrayList()
Dim privateParameterOut As SqlParameter
Dim privateConnection As SqlConnection
Dim privateCommand As New SqlCommand
Dim privateConnectionString As String
Try
privateConnection = New SqlConnection(privateConnectionString)
privateCommand = New SqlCommand(SPName, privateConnection)
privateCommand.CommandType = CommandType.StoredProcedure
Do While (usedEnumerator.MoveNext())
privateUsedParameter = Nothing
privateUsedParameter = usedEnumerator.Current
privateParameter = GeneralParameter.ConvertToSqlParameters(privateUsedParameter)
privateCommand.parameters.add(privateParameter)
Loop
privateConnection.open()
privateCommand.ExecuteNonQuery()
For Each privateParameterOut In privateCommand.parameters
If privateParameterOut.Direction = ParameterDirection.Output Or privateParameterOut.Direction = ParameterDirection.ReturnValue Then outputParameters.Add(privateParameterOut.Value)
Next
Return outputParameters
Catch ExceptionObject As Exception
Throw New Exception(privateExceptionMessage, ExceptionObject)
Finally
privateConnection.close()
End Try
End Function
End Class
Public Class GeneralParameter
Public Name As String
Public value As Object
Public DataType As SqlDataType
Public Size As Integer
Public DirectionUsed As ParameterDirection
Private privateParameterList As ArrayList = New ArrayList()
Private Const privateExceptionMessage As String = "Data Application Error"
Sub New(ByVal pName As String, _
Optional ByVal pValue As Object = Nothing, _
Optional ByVal pSqlType As SqlDataType = Nothing, _
Optional ByVal pSize As Integer = Nothing, _
Optional ByVal pDirection As ParameterDirection = ParameterDirection.Input)
Name = pName
value = pValue
DataType = pSqlType
Size = pSize
DirectionUsed = pDirection
End Sub
Public Sub BuildParameter(ByVal ParameterName As String, _
Optional ByVal Value As Object = Nothing, _
Optional ByVal SQLType As SQLDataType = Nothing, _
Optional ByVal Size As Integer = Nothing, _
Optional ByVal Direction As ParameterDirection = ParameterDirection.Input)
Dim buildDataType As SqlDbType
Dim buildParameter As GeneralParameter = Nothing
Select Case SQLType
Case SQLDataType.SqlString
buildDataType = SqlDbType.VarChar
Case SqlDataType.SqlChar
buildDataType = SqlDbType.Char
Case SQLDataType.SqlInt
buildDataType = SqlDbType.Int
Case SQLDataType.SqlBit
buildDataType = SqlDbType.Bit
Case SQLDataType.SqlDateTime
buildDataType = SqlDbType.DateTime
Case SQLDataType.SqlDecimal
buildDataType = SqlDbType.Decimal
Case SQLDataType.SqlMoney
buildDataType = SqlDbType.Money
Case SQLDataType.SqlImage
buildDataType = SqlDbType.Image
End Select
buildParameter = New GeneralParameter(ParameterName, Value, buildDataType, Size, Direction)
privateParameterList.Add(buildParameter)
End Sub
Public Shared Function ConvertToSqlParameters(ByVal passedParameter As GeneralParameter) As SqlParameter
Dim returnSqlParameter As SqlParameter = New SqlParameter()
returnSqlParameter.ParameterName = passedParameter.Name
returnSqlParameter.Value = passedParameter.value
returnSqlParameter.SqlDbType = passedParameter.DataType
returnSqlParameter.Size = passedParameter.Size
returnSqlParameter.Direction = passedParameter.DirectionUsed
Return returnSqlParameter
End Function
Public Sub makeClear()
Try
privateParameterList.Clear()
Catch parameterException As Exception
Throw New Exception(privateExceptionMessage & "Parameter List did not clear", parameterException)
End Try
End Sub
End Class
End Namespace