Sto cercando di predisporre le routine di libreria, che si interfacciano al database, al supporto di più DB in modo che, sulla base di un parametro che arriva via lista (DBServerType), non sia necessario duplicare le routine. Per quanto riguarda connessioni e transazioni faccio arrivare via lista una mia struttura che al suo interno contiene le connessioni/transazioni per tutti i DB interessati e, come si vede dal codice, applico quelle richieste sulla base del parametro DBServerType.
Per le variabili interne (command e parameters) pensavo potesse funzionare qualcosa del tipo:
Select Case DBServerType
Case DBServer.MSAccess, DBServer.OLEDB
Dim cmd As OleDbCommand
Dim prmGroupID As New OleDbParameter
Case DBServer.SQLServer
Dim cmd As SqlClient.SqlCommand
Dim prmGroupID As New SqlClient.SqlParameter
End Select
Ma ottengo solo errori di sintassi nel resto della routine. L'intento sarebbe quello di utilizzare le stesse variabili e non un cmdo per oleedb e cmds per sql server.
Vorrei evitare di usare gli overload perchè a volte le routine che ho già scritto hanno già delle versioni in overload e vorrei non avere la proliferazione degli overload.
Gli overload li userei sicuramente per le routine:
- SetOleParameter
- ExecuteNonQuery (+ altre ExecuteReader e ExecuteScalar)
Avete qualche suggerimento per superare questo ostacolo?
Sotto un esempio di routine.
Grazie
Public Shared Sub PutEmployeeAbsenceGroup(ByVal DBServerType As Integer, ByVal DBconn As DBConnectionsType, _
ByVal ProgName As String, ByVal FormName As String, _
ByVal ErrLanguage As String, ByVal InsertMode As Boolean, _
ByVal LenDescription As Integer, _
ByVal AbsenceGroupInfo As EmployeeAbsenceGroupType, _
ByRef DBTransaction As DBTransactionType, ByRef OperationDone As Boolean)
Dim strSQL As String, RoutineName As String = "PutEmployeeAbsenceGroup"
Dim NumRowsAffected As Integer Dim cmd As New OleDbCommand Dim rst As OleDbDataReader = Nothing Dim prmGroupID As New OleDbParameter, prmDescription As New OleDbParameter'
' Inserimento/aggiornamento gruppo assenze
'
If InsertMode Then
strSQL = "INSERT INTO GruppiAssenzeCollaboratori " & _
" (GroupID,Description) " & _
"VALUES (?,?);"
Else
strSQL = "UPDATE GruppiAssenzeCollaboratori " & _
"SET Description=? " & _
"WHERE GroupID=?;"
End If
With AbsenceGroupInfo
Call SetOleParameter(cmd, ParameterDirection.Input, "prmGroupID", .ID, False, prmGroupID)
Call SetOleParameter(cmd, ParameterDirection.Input, "prmDescription", LenDescription, .Description, False, _
prmDescription)
End With
With cmd
Select Case DBServerType
Case DBServer.MSAccess, DBServer.OLEDB
.Connection = DBconn.OleDbconn
.Transaction = DBTransaction.OleDbTransaction
End Select
.CommandText = strSQL
.CommandType = CommandType.Text
If InsertMode Then .Parameters.Add(prmGroupID)
.Parameters.Add(prmDescription)
If Not InsertMode Then .Parameters.Add(prmGroupID)
End With
Call ExecuteNonQuery(DBServerType, ProgName, FormName, RoutineName, ErrLanguage, True, DBTransaction, cmd, _
NumRowsAffected, OperationDone)
If Not OperationDone Then Exit Sub
cmd = Nothing
End Sub