e' un vecchio codice che avrà anche delle imperfezioni, ma tutto sommato funziona e fa il suo sporco lavorocodice:NameSpace Libreria Public Class SqlTools Private _StringaConnessione As String Public Property StringaConnessione() As String Get Return _StringaConnessione End Get Set(ByVal Value As String) _StringaConnessione = Value End Set End Property Private _SQL As String Public Property SQL() As String Get Return _SQL End Get Set(ByVal Value As String) _SQL = Value End Set End Property ' Proprietà Private Private internal_SQLCONN As SqlConnection Private internal_READER As SqlDataReader Private internal_SQLCOMMAND As SqlCommand Private internal_SQLADAPTER As SqlDataAdapter Private internal_DATASET As DataSet Public Sub New() ' Settaggio StringaConn Me.StringaConnessione = ConfigurationManager.AppSettings("nomeapplicazione") End Sub Private Sub Connetti() Try internal_SQLCONN = New SqlConnection(StringaConnessione) internal_SQLCONN.Open() Catch ex As SqlException internal_SQLCONN.Close() Me._SQL = "" Me._StringaConnessione = "" Throw ex End Try End Sub Public Function EstraiDataSet(ByVal strNomeDataTable As String) As DataSet Connetti() internal_DATASET = New DataSet internal_SQLADAPTER = New SqlDataAdapter(Me._SQL, internal_SQLCONN) Try internal_SQLADAPTER.Fill(internal_DATASET, strNomeDataTable) Return internal_DATASET Catch ex As SqlException Throw ex Return Nothing Finally internal_SQLCONN.Close() End Try End Function Public Function EstraiDataTable(ByVal strNomeDataTable As String) As DataTable Connetti() internal_DATASET = New DataSet internal_SQLADAPTER = New SqlDataAdapter(Me._SQL, internal_SQLCONN) Try internal_SQLADAPTER.Fill(internal_DATASET, strNomeDataTable) Return internal_DATASET.Tables(0) Catch ex As SqlException Throw ex Return Nothing Finally internal_SQLCONN.Close() End Try End Function Public Shared Function EstraiDataTable_AutoSelect(ByVal strNomeTabella As String) As DataTable Dim db As New LIBRERIA.Database.SqlTools db.Connetti() db.internal_DATASET = New DataSet db.internal_SQLADAPTER = New SqlDataAdapter("SELECT * FROM " & strNomeTabella, db.internal_SQLCONN) Try db.internal_SQLADAPTER.Fill(db.internal_DATASET, strNomeTabella) Return db.internal_DATASET.Tables(0) Catch ex As SqlException Throw ex Return Nothing Finally db.internal_SQLCONN.Close() End Try End Function ' Restituisce un SqlDataReader Public Function EstraiDataReader() As SqlDataReader Connetti() internal_SQLCOMMAND = New SqlCommand(Me._SQL, internal_SQLCONN) Try internal_READER = internal_SQLCOMMAND.ExecuteReader() Return internal_READER Catch ex As SqlException Throw ex internal_SQLCONN.Close() Return Nothing Finally internal_SQLCOMMAND.Dispose() End Try End Function ' INSERT, UPDATE, DELETE Public Function ModificaDatabase() As Boolean Connetti() internal_SQLCOMMAND = New SqlCommand(Me._SQL, internal_SQLCONN) Try Dim affected As Integer ' Execute non query è per comandi non-select affected = internal_SQLCOMMAND.ExecuteNonQuery() If affected > 0 Then Return True End If Catch ex As SqlException Throw ex Return False Finally internal_SQLCONN.Close() internal_SQLCOMMAND.Dispose() End Try End Function ' Restituisce un DataTable che contiene lo schema della tabella Public Function Schema() As DataTable Connetti() internal_SQLCOMMAND = New SqlCommand(Me._SQL, internal_SQLCONN) Dim internal_DataTable As DataTable Try internal_READER = internal_SQLCOMMAND.ExecuteReader(CommandBehavior.KeyInfo Or CommandBehavior.SchemaOnly) internal_DataTable = internal_READER.GetSchemaTable() Return internal_DataTable Catch ex As SqlException Return Nothing Finally internal_READER.Close() internal_SQLCONN.Close() internal_SQLCOMMAND.Dispose() End Try End Function ' --------------------------------------------- ' Esegue una Stored Procedure SENZA PARAMETRI ' --------------------------------------------- Public Sub EseguiStored(ByVal nomeSP As String) Dim ds As New DataSet Dim dt As New DataTable Dim cn As SqlConnection = New SqlConnection(Me._StringaConnessione) Dim cmd As SqlCommand = New SqlCommand(nomeSP, cn) cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = nomeSP Try cn.Open() cmd.ExecuteNonQuery() Catch dataex As SqlException Throw dataex Catch ex As Exception Throw ex Finally cn.Close() cmd.Dispose() End Try End Sub ' ------------------------------------------------------------------------ ' Esegue una Stored Procedure SENZA PARAMETRI e restituisce un Datatable ' ------------------------------------------------------------------------ Public Function EseguiStored_Datatable(ByVal nomeSP As String) As DataTable Dim ds As New DataSet Dim dt As New DataTable Dim cn As SqlConnection = New SqlConnection(Me._StringaConnessione) Dim cmd As SqlCommand = New SqlCommand(nomeSP, cn) cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = nomeSP Dim adapter As New SqlDataAdapter(cmd) Try cn.Open() adapter.Fill(ds) dt = ds.Tables(0) Return dt Catch dataex As DataException Throw dataex Catch ex As Exception Throw ex Finally cn.Close() cmd.Dispose() End Try End Function ' --------------------------------------------- ' Esegue una Stored Procedure CON PARAMETRI ' --------------------------------------------- Public Sub EseguiStoredConParametri(ByVal nomeSP As String, ByVal pars As SqlParameter()) Dim cn As SqlConnection = New SqlConnection(Me._StringaConnessione) Dim cmd As SqlCommand = New SqlCommand cmd.CommandText = nomeSP ' Il commandtext è la SP ricevuta cmd.Connection = cn ' Assegna la connessione cmd.CommandType = CommandType.StoredProcedure Dim ad As SqlDataAdapter For Each p As SqlParameter In pars cmd.Parameters.Add(p) Next Try cn.Open() cmd.ExecuteNonQuery() Catch dataex As DataException Throw dataex Catch ex As Exception Throw ex Finally cn.Close() cmd.Dispose() End Try End Sub ' ------------------------------------------------------------------------ ' Esegue una Stored Procedure CON PARAMETRI e restituisce un DTable ' ------------------------------------------------------------------------ Public Function EseguiStoredConParametri_Datatable(ByVal nomeSP As String, ByVal pars As SqlParameter()) As DataTable Dim ds As New DataSet Dim dt As New DataTable Dim cn As SqlConnection = New SqlConnection(Me._StringaConnessione) Dim cmd As SqlCommand = New SqlCommand(nomeSP, cn) cmd.CommandType = CommandType.StoredProcedure For Each p As SqlParameter In pars cmd.Parameters.Add(p) Next Dim adapter As New SqlDataAdapter(cmd) Try cn.Open() adapter.Fill(ds) dt = ds.Tables(0) Return dt Catch dataex As DataException Throw dataex Catch ex As Exception Throw ex Finally cn.Close() cmd.Dispose() End Try End Function End Class End NameSpace![]()