Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Store Procedure parametrizzate e eseguzione
sabato 26 luglio 2008 - 11.17
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
sab 26 lug 2008 - 11:17
Salve, programmo in visual studio 2005 professional e SqlServer 2005 da autodidatta, ho un problema molto importante per me, ma magari di
estrema semplicità per voi.
Mi spiego, ho circa 10 store procedure sul mio database in SQLServer 2005 che voglio mandare in esecuzione da un form contenente
una combobox dalla quale seleziono il mese e un textbox dove digito l'anno questi due sono i parametri che le store procedure devono essere agganciate
e mandate in esecuzione tramite la pressione di un button.
Primo problema vorrei parametrizzare tutte le SP in base a mese e anno e non so come si fa;
Secondo problema quando le mando in esecuzione il parametro che deve essere agganciato è per quanto riguarda il mese uso una combobox e per l'anno uso
una textbox inserite in un form;
Terzo problema vorrei se la cosa è possibile quando mando in esecuzione tutte le SP che il programma controllasse se la i dati siano stati inseriti nella
tabella e qundi mandasse in esecuzione la successiva SP e cosi via e se una delle SP non completasse il trasferimento dei dati bloccasse tutto;
Terzo problema mi piacerebbe che quando vanno in esecuzione le SP sul form si vedesse o con un ProgressBar o con altro il comportamento dell'esecuzione.
Vi posto una delle store procedure e il codice inserito nel button per mandararle in esecuzione.
una delle store procedure:
ALTER PROCEDURE dbo.MissioneInserisci
AS
INSERT INTO Indennità
(CodiceFiscale, Grado, Cognome, Nome, LuogoNascita, DataNascita, EnteAppartenenza, IndirizzoEnte, CapEnte, LuogoEnte, PaeseCoord, CinEstero,
Cin, Abi, Cab, CC, LivParCod, Sistema, Missione, InizioMissione, Giorni, Mese, Anno, Motivo, OreOmnicomprensiva, Importo, FondoCredito,
ContoEntrataTesoro, Irpef, TotLordo, TotFC, TotCET, TotNettoRit, TotIrpef, NettoMano, ForzaArmata, Retribuzione)
SELECT Anagrafica.CodiceFiscale, Anagrafica.Grado, Anagrafica.Cognome, Anagrafica.Nome, Anagrafica.LuogoNascita, Anagrafica.DataNascita,
Anagrafica.EnteAppartenenza, Anagrafica.IndirizzoEnte, Anagrafica.CapEnte, Anagrafica.LuogoEnte, Anagrafica.PaeseCoord, Anagrafica.CinEstero,
Anagrafica.Cin, Anagrafica.Abi, Anagrafica.Cab, Anagrafica.CC, Anagrafica.LivParCod, Anagrafica.Sistema, Anagrafica.Missione,
Anagrafica.InizioMissione, 30 AS Giorni, CalcolaMissione.Mese, CalcolaMissione.Anno,
'Indennità Omnicomprensiva (art.9 O.P.C.M. n. 3682 del 10 giugno 2008)' AS Motivo, Missione.OreOmnicomprensiva, Gradi.Importo,
Tassazione.FondoCredito, Tassazione.ContoEntrataTesoro, Gradi.Irpef, Gradi.Importo * Missione.OreOmnicomprensiva AS TotLordo,
Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100 AS TotFC,
Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100 AS TotCET,
(Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100 AS TotNettoRit,
((Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100) * Gradi.Irpef / 100 AS TotIrpef,
((Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100)
- ((Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100) * Gradi.Irpef / 100 AS NettoMano, Anagrafica.ForzaArmata,
'M' AS Retribuzione
FROM Anagrafica INNER JOIN
Missione ON Anagrafica.CodMissione = Missione.Missione INNER JOIN
Gradi ON Anagrafica.Grado = Gradi.Grado AND Anagrafica.LivParCod = Gradi.LivParCod AND Anagrafica.ForzaArmata = Gradi.ForzaArmata INNER JOIN
Tassazione ON Anagrafica.Sistema = Tassazione.Sistema CROSS JOIN
CalcolaMissione
WHERE (Anagrafica.CodMissione <= 500)
GROUP BY Anagrafica.CodiceFiscale, Anagrafica.Grado, Anagrafica.Cognome, Anagrafica.Nome, Anagrafica.EnteAppartenenza, Anagrafica.IndirizzoEnte,
Anagrafica.CapEnte, Anagrafica.LuogoEnte, Anagrafica.PaeseCoord, Anagrafica.CinEstero, Anagrafica.Cin, Anagrafica.Abi, Anagrafica.Cab,
Anagrafica.CC, Anagrafica.LivParCod, Anagrafica.Sistema, Anagrafica.Missione, Anagrafica.InizioMissione, CalcolaMissione.Mese,
CalcolaMissione.Anno, Missione.OreOmnicomprensiva, Gradi.Importo, Tassazione.FondoCredito, Tassazione.ContoEntrataTesoro, Gradi.Irpef,
Gradi.Importo * Missione.OreOmnicomprensiva, Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100,
Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100,
(Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100,
((Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100) * Gradi.Irpef / 100,
((Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100)
- ((Gradi.Importo * Missione.OreOmnicomprensiva - Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.FondoCredito / 100)
- Gradi.Importo * Missione.OreOmnicomprensiva * Tassazione.ContoEntrataTesoro / 100) * Gradi.Irpef / 100, Anagrafica.FineMissione,
Anagrafica.Pagamento, Gradi.Ordine, Anagrafica.LuogoNascita, Anagrafica.DataNascita, Anagrafica.ForzaArmata
HAVING (Anagrafica.FineMissione = 'No') AND (Anagrafica.Pagamento = 'Bonifico')
ORDER BY Gradi.Ordine, Anagrafica.Cognome
return
IL CODICE INSERITO NEL BUTTON PER MANDARE IN ESECUZIONE TUTTE LE STORE PROCEDURE
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Me.MeseComboBox.Text = "" Then
MsgBox("Seleziona mese da pagare")
Else
If Me.AnnoTextBox.Text = "" Then
MsgBox("Inserisci l'anno di riferimento")
Else
Me.Validate()
Me.CalcolaMissioneBindingSource.EndEdit()
Me.CalcolaMissioneTableAdapter.Update(Me.DatabaseDataSet.CalcolaMissione)
With ProgressBar1
.Visible = True
.Minimum = 1
.Maximum = 100000
.Value = 1
.Step = 1
For i As Integer = .Minimum To .Maximum
' Perform one step of the action being tracked.
.PerformStep()
Next i
' Imposta le variabili stringa per la connessione e per
' due query SQL; crea un'istanza dell'oggetto SqlConnection
Dim qrySelezione, conConnetti As String
conConnetti = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Programmi\TEOR\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; "
Dim conConnessione As New SqlConnection(conConnetti)
qrySelezione = "SELECT dbo.Anagrafica.CodiceFiscale, dbo.Anagrafica.Grado, dbo.Anagrafica.Cognome, dbo.Anagrafica.Nome, dbo.Anagrafica.Missione, dbo.Anagrafica.CodMissione , dbo.Anagrafica.Pagamento, dbo.Presenze.Giorni, dbo.Presenze.Mese, dbo.Presenze.Anno FROM dbo.Anagrafica INNER JOIN dbo.Presenze ON dbo.Anagrafica.CodiceFiscale = dbo.Presenze.CodiceFiscale WHERE (dbo.Anagrafica.CodMissione >= 510) AND (dbo.Presenze.Giorni > 0) AND (dbo.Presenze.Liquidata = 'No')"
' Svuota la casella ListView1 e
' la casella di testo
ListView1.Items.Clear()
TextBox1.Text = ""
' Crea un Dataset provvisorio, utilizzando la connessione
' predefinita, una nuova istanza dell'Oggetto SqlCommand e una
' nuova istanza degli oggetti Dataset e SqlDataAdapter.
' Carica di dati il Dataset.
conConnessione.Open()
Dim cmdComando1 As New SqlCommand(qrySelezione, conConnessione)
Dim dsDataSet0 As New DataSet
Dim daAdattatore0 As New SqlDataAdapter
daAdattatore0.SelectCommand = cmdComando1
daAdattatore0.Fill(dsDataSet0)
' Crea il Dataset di lavoro nello stesso modo di quello
' provvisorio, utilizzando la stessa connessione, ma
' un argomento diverso per la nuova istanza di SqlCommand.
' Crea una nuova istanza di Dataset e di SqlDataAdapter
' Carica di dati il Dataset
Dim cmdComando As New SqlCommand(qrySelezione, conConnessione)
Dim dsDataSet As New DataSet
Dim daAdattatore As New SqlDataAdapter
daAdattatore.SelectCommand = cmdComando
daAdattatore.Fill(dsDataSet)
' Utilizza entrambi i DataSet per contare tutte le righe
' presenti nella tabella InizioMissione e tutte le righe
' ottenute con la seconda query
' Inserisce i valori ottenuti nella casella di testo
' TextBox1 e quindi elimina il primo Dataset
Dim dsRiga As DataRow
Dim intConta0, intConta As Integer
intConta0 = dsDataSet0.Tables(0).Rows.Count
intConta = dsDataSet.Tables(0).Rows.Count
TextBox1.Text = intConta & " Indennità che saranno calcolate su " & intConta0
dsDataSet0.Dispose()
' Svuota la casella ListView1,
' imposta la casella TextBox1
' e azzera il contatore intConta
intConta = 0
ListView1.Items.Clear()
For Each dsRiga In dsDataSet.Tables(0).Rows
ListView1.Items.Add(dsRiga("CodiceFiscale"))
ListView1.Items(intConta).SubItems.Add(dsRiga("Cognome"))
ListView1.Items(intConta).SubItems.Add(dsRiga("Nome"))
ListView1.Items(intConta).SubItems.Add(dsRiga("Missione"))
ListView1.Items(intConta).SubItems.Add(dsRiga("CodMissione"))
ListView1.Items(intConta).SubItems.Add(dsRiga("Pagamento"))
intConta = intConta + 1
Next
' Terminiamo il lavoro libero le risorse
' di memoria e di elaborazione chiudendo
' la connessione ed eliminando il DataSet
dsDataSet.Dispose()
conConnessione.Close()
If intConta = 0 Then
MsgBox("Nessuna Missione da calcolare")
Else
If MessageBox.Show("Vuoi calcolare l'omnicomprensiva?", "Liquida omnicomprensiva", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) = Windows.Forms.DialogResult.Yes Then
With ProgressBar1
.Visible = True
.Minimum = 1
.Maximum = 100000
.Value = 1
.Step = 1
For i As Integer = .Minimum To .Maximum
' Perform one step of the action being tracked.
.PerformStep()
Next i
Try
Dim ConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Programmi\TEOR\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim SqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(ConnectionString)
Dim SqlCommand As New SqlClient.SqlCommand
SqlCommand.CommandTimeout = 15
SqlCommand.CommandType = CommandType.Text
SqlCommand.Connection = SqlConn
SqlCommand.CommandText = "EXEC dbo.MissioneInserisciPresenza"
SqlConn.Open()
SqlCommand.ExecuteNonQuery()
SqlConn.Close()
SqlConn.Dispose()
Catch ex As Exception
End Try
Try
Dim ConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Programmi\TEOR\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim SqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(ConnectionString)
Dim SqlCommand As New SqlClient.SqlCommand
SqlCommand.CommandTimeout = 15
SqlCommand.CommandType = CommandType.Text
SqlCommand.Connection = SqlConn
SqlCommand.CommandText = "EXEC dbo.MissioneInserisciContantiPresenze"
SqlConn.Open()
SqlCommand.ExecuteNonQuery()
SqlConn.Close()
SqlConn.Dispose()
Catch ex As Exception
End Try
Try
Dim ConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Programmi\TEOR\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim SqlConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(ConnectionString)
Dim SqlCommand As New SqlClient.SqlCommand
SqlCommand.CommandTimeout = 15
SqlCommand.CommandType = CommandType.Text
SqlCommand.Connection = SqlConn
SqlCommand.CommandText = "EXEC dbo.PresenzaLiquidata"
SqlConn.Open()
SqlCommand.ExecuteNonQuery()
SqlConn.Close()
SqlConn.Dispose()
Catch ex As Exception
End Try
.Visible = False
End With
MessageBox.Show("OK IL CALCOLO DELLA MISSIONE E' STATO COMPLETATO CON SUCCESSO", "CONFERMA", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End If
.Visible = False
End With
End If
End If
End Sub
Spero di essere stato chiaro ringrazio in anticipo
Perfavore è molto urgente aiutatemi
Mau67
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
sab 26 lug 2008 - 16:50
Per inserire i parametri sulle stored procedure (guarda la documentazione online) devi cambiare le stored:
ALTER PROCEDURE myprocedure
@Anno Int
AS
SELECT xxxx FROM mytable WHERE table.mycampoanno = @Anno
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
sab 26 lug 2008 - 17:03
Ok ma per mandarla in esecuzione la stored come faccio?
Dove e come aggancio la combobox e la textbox al parametro? da un button nella form?
Ciao grazie
Mau67
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
sab 26 lug 2008 - 17:08
Beh nei comandi devi aggiungere il parametro al sql command
MySqlCommand.Parameters.AddWithValue("@Anno",myVarAnno)
Se invece intendevi "filtrare" i dati per anno dopo l'estrazione devi intervenire sul bindingsource impostando RowFilter = "anno = " & combobox.text
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !