Errore di insert in visual studio 2005

martedì 16 settembre 2008 - 14.12

Mau67 Profilo | Expert

Buon pomeriggio, chi mi aiuta a corregere questo codice non mi va in esecuzione mi da degli errori vi posto il codice

If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()

Dim objConnection As New SqlConnection(sqlString)
Dim data As Date = Microsoft.VisualBasic.DateValue(Now)


Dim objCommand As SqlCommand = New SqlCommand()


' Set the SqlCommand object properties...
objCommand.Connection = objConnection
objCommand.CommandText = "INSERT INTO Indennità (IDUtente, Giorni, Mese, Anno, DataPagamento, Gruppo, IDIndennità) Select (IDUtente, DataInserimento, Gruppo FROM Anagrafica Where DataInserimento <= '" & data & "' And Gruppo = '" & cboGruppo.Text & "', @Giorni , @Mese, @Anno, @DataPagamento, @Gruppo, @IDIndennità)"


' Add parameters for the placeholders in the SQL in the
' CommandText property...

objConnection.Open()

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Giorni", 30)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Mese", cboMese.Text)


' Parameter for the title column...
objCommand.Parameters.AddWithValue("@Anno", txtAnno.Text)


' Parameter for the price column...
objCommand.Parameters.AddWithValue("@DataPagamento", cboData.Text).DbType _
= DbType.Date

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@Gruppo", cboGruppo.Text)

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@IDIndennità", "IDUtente" & cboData.Text)


' Execute the SqlCommand object to insert the new data...
Try
objCommand.ExecuteNonQuery()
Catch SqlExceptionErr As SqlException
MessageBox.Show(SqlExceptionErr.Message)
End Try

' Close the connection...
objConnection.Close()

ringrazio in anticipo
Mau67

alx_81 Profilo | Guru

>Buon pomeriggio, chi mi aiuta a corregere questo codice non mi
>va in esecuzione mi da degli errori vi posto il codice
Scusa, potresti postare l'errore che ti torna?

Già tre cose non mi piacciono , e sono:

- La gestione della data con il namespace Microsoft.VisualBasic
- L'accento nei nome di campo e tabella (identificatori)
- L'SQL dinamico con la concatenazione e la possibilità di SQL Injection


Per ora postaci l'eccezione che ottieni, poi vediamo di vedere anche le altre cose
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

Questo è l'errore che mi restituisce:

SINTASSI NON CORRETTA IN PROSSIMITA' DI ','.

Se ritieni di dover cambiare la insert fallo pure.

Ciao grazie
Mau67

alx_81 Profilo | Guru

Allora, andiamo per passo:

- Punto uno, non mettere mai gli accenti negli identificatori (come campi e nomi oggetto). Segui le regole qui descritte:

Identificatori
http://technet.microsoft.com/it-it/library/ms175874.aspx

- Punto due, non leggere la connectionstring da un qualunque file di testo, quando puoi tranquillamente leggerlo dai file app.config (applicazioni windows) o web.config (applicazioni web). Leggi questo post per capire come scrivere la configurazione e successivamente come leggerne il valore:

http://www.dotnethell.it/forum/messages.aspx?ThreadID=25254

- Punto tre, non usare mai concatenazione in SQL. Utilizza le query parametriche, come già avevi iniziato a fare. Sono quelle query con placeholder al posto del valore del parametro:

objCommand.CommandText = "INSERT INTO Indennità (IDUtente, Giorni,Mese, Anno, DataPagamento, Gruppo, IDIndennita)
VALUES (@IDUtente, @Giorni, @Mese, @Anno, @DataPagamento, @Gruppo, @IDIndennita)"

e poi popola la collezione dei parametri.

Per ottenere l'idutente, visto che hai una query, puoi pensare di scrivere invece una stored procedure su sql server:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Poi nella proprietà commandtext del command:
objCommand.CommandText = "dbo.proc_InserisciIndennita" objCommand.CommandType = CommandType.StoredProcedure


Il resto è la stessa cosa..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

Ho creato la Store procedure copiando la tua, Nel Form ho inserito il codice seguente:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click


If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()

Dim objConnection As New SqlConnection(sqlString)
Dim data As Date = Microsoft.VisualBasic.DateValue(Now)


Dim objCommand As SqlCommand = New SqlCommand()


' Set the SqlCommand object properties...
objCommand.Connection = objConnection

' Add parameters for the placeholders in the SQL in the
' CommandText property...

objCommand.CommandText = "dbo.proc_IndennitàMensile"

objCommand.CommandType = CommandType.StoredProcedure

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Giorni", 30)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Mese", cboMese.Text)


' Parameter for the title column...
objCommand.Parameters.AddWithValue("@Anno", txtAnno.Text)


' Parameter for the price column...
objCommand.Parameters.AddWithValue("@DataPagamento", cboData.Text).DbType _
= DbType.Date

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@Gruppo", cboGruppo.Text)


objConnection.Open()

' Execute the SqlCommand object to insert the new data...
Try
objCommand.ExecuteNonQuery()
Catch SqlExceptionErr As SqlException
MessageBox.Show(SqlExceptionErr.Message)
End Try

' Close the connection...
objConnection.Close()

End Sub

MA IN FASE DI ESECUZIONE MI inserisce solo l'ultimo record della tabella anagrafica, invece deve inserire tutti i record filtrati in base a DataInserimento e Gruppo.

Invece per quanto riguarda IDUtente deve copiare fedelmente quelli della Tabella Anagrafica sempre in base ai dati filtrati in base a DataInserimento e Gruppo.

Invece per Quanto riguarda IDIndennità andrebbe bene il codice inserito nella Store Procedure al posto di IDUtente andrebbe IDIndennità e cioè questo che hai scritto:
SELECT @IDUtente = IDUtente + CAST(YEAR(DataInserimento) AS char(4)) + RIGHT('00' + CAST(MONTH(DataInserimento) AS varchar(2)),2) + RIGHT('00' + CAST(DAY(DataInserimento) AS varchar(2)),2) + Gruppo FROM Anagrafica WHERE DataInserimento <= GETDATE() AND Gruppo = @Gruppo



Grazie il codice sarebbe perfetto con le modifiche che ti ho descritto sopra ti ringrazio

Mau67

alx_81 Profilo | Guru

Come mai hai lasciato la lettura da file e non usi le configurazioni di .NET?

>MA IN FASE DI ESECUZIONE MI inserisce solo l'ultimo record della
>tabella anagrafica, invece deve inserire tutti i record filtrati
>in base a DataInserimento e Gruppo.
Prova a controllare che la select ti torni effettivamente ciò che ti serve usando SQL SERVER..
Fissi i parametri come meglio credi e costruisci la select che poi dovrà essere la tua select per la INSERT.

>Invece per quanto riguarda IDUtente deve copiare fedelmente quelli
>della Tabella Anagrafica sempre in base ai dati filtrati in base
>a DataInserimento e Gruppo.
ok, allora valorizza solo l'ID Utente, io non posso conoscere le tue logiche, a meno che non mi passi i comandi di CREATE TABLE, qualche INSERT e il risultato che vuoi ottenere..
Ho provato solo a darti un approccio diverso

>Invece per Quanto riguarda IDIndennità andrebbe bene il codice
>inserito nella Store Procedure al posto di IDUtente andrebbe
>IDIndennità e cioè questo che hai scritto:
>SELECT @IDUtente = IDUtente + CAST(YEAR(DataInserimento) AS char(4))
>+ RIGHT('00' + CAST(MONTH(DataInserimento) AS varchar(2)),2)
>+ RIGHT('00' + CAST(DAY(DataInserimento) AS varchar(2)),2) +
>Gruppo FROM Anagrafica WHERE DataInserimento <= GETDATE()
>AND Gruppo = @Gruppo
Modifica pure, ti ripeto, io non posso sapere cosa ti serve di preciso. Trasforma questa select in quella che ti serve (Basta chiamare la var @IDIndennita e inserirla dopo)
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

Ok ho modificato la store procedure per come serve a me c'è solo un problema mi inserisce nella tabella Indennità solo l'ultimo record filtrato.

Mi spiego meglio e ti faccio un esempio

IDUtente della tabelle anagrafica:
id00001
id00002
id00003
id00004
id00005
id00006
id00007
id00008
id00009
id000010
id000011

Quando mando in esecuzione la store procedure nella tabella indennità mi inserisce solo L'ultimo IDUtente e non tutti quelli filtrati e cioè

id000011

Cosa devo fare?

Risolto questo problema ho finito il programma

Grazie


Mau67

alx_81 Profilo | Guru

>Ok ho modificato la store procedure per come serve a me c'è solo
>un problema mi inserisce nella tabella Indennità solo l'ultimo
>record filtrato.
>
>Mi spiego meglio e ti faccio un esempio
>
>IDUtente della tabelle anagrafica:
>id00001
>id00002
>id00003
>id00004
>id00005
>id00006
>id00007
>id00008
>id00009
>id000010
>id000011
>
>Quando mando in esecuzione la store procedure nella tabella indennità
>mi inserisce solo L'ultimo IDUtente e non tutti quelli filtrati
>e cioè
>id000011
Questo perchè valorizzando la variabile essa contiene solo l'ultimo degli IDUtente.

>Cosa devo fare?
Devi fare la insert da una select:

INSERT INTO TuaTabella (campo1, campo2, campo3)
SELECT campo1, campo2, campo3
FROM AltraTuaTabella
WHERE Tuocriterio

se vuoi che uno o più campi siano fissi al valore di un parametro puoi anche fare:

INSERT INTO TuaTabella (campo1, campo2, campo3)
SELECT campo1, @param1, @param2
FROM AltraTuaTabella
WHERE Tuocriterio.

>Grazie
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

ALTER PROCEDURE dbo.proc_IndennitàMensile
@Giorni smallint
, @Mese varchar(50)
, @Anno smallint
, @DataPagamento smalldatetime
, @Gruppo varchar(50)
, @IDIndennità varchar(50)
, @DataInserimento smalldatetime
, @FineMissione varchar(2)
AS
BEGIN

SET NOCOUNT ON;

DECLARE @IDUtente varchar(50)

SELECT @IDUtente = IDUtente, @Giorni, @Mese, @Anno, @DataPagamento, @Gruppo, @IDIndennità FROM Anagrafica WHERE DataInserimento = @DataInserimento AND Gruppo = @Gruppo AND FineMissione = 'No'

INSERT INTO Indennità (IDUtente, Giorni,Mese, Anno, DataPagamento, Gruppo, IDIndennità)


END


PERCHE' MI DA QUESTO ERRORE

Le Istruzioni SELECT per l'assegnazioni di valori alle variabili non devono essere eseguite insieme a operazioni di recupero dei dati.
Sintasi non corretta in prossimità della parola chiave END

Aiutami grazie
Mau67

alx_81 Profilo | Guru

>PERCHE' MI DA QUESTO ERRORE
>Le Istruzioni SELECT per l'assegnazioni di valori alle variabili
>non devono essere eseguite insieme a operazioni di recupero dei
>dati.
>Sintasi non corretta in prossimità della parola chiave END
Non è la sintassi corretta.. rivedi il mio post.. è così:
INSERT INTO Indennità (IDUtente, Giorni, Mese, Anno, DataPagamento, Gruppo, IDIndennità) SELECT IDUtente , @Giorni , @Mese , @Anno , @DataPagamento , @Gruppo , @IDIndennità FROM Anagrafica WHERE DataInserimento = @DataInserimento AND Gruppo = @Gruppo AND FineMissione = 'No'

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

Mi genera un altro errore

SINTASSI NON CORRETTA PAROLA CHIAVE INSERT
DICHIARARE LA VARIABILE A SCALARE @Giorni

AIUTO!!!!!

Grazie
Mau67

alx_81 Profilo | Guru

>Mi genera un altro errore
>
>SINTASSI NON CORRETTA PAROLA CHIAVE INSERT
>DICHIARARE LA VARIABILE A SCALARE @Giorni
>
>AIUTO!!!!!
Allora, facciamo chiarezza.. io li ho indicati come tu li hai indicati e sono @nome ovvero parametri o variabili.
Dove devi andare a leggere i campi Giorni, Mese, Anno, DataPagamento, Gruppo e IDIndennità?
Sono nella tabella Anagrafica? Vuoi passarli come parametri? Vanno calcolati internamente alla stored procedure?
Come ti torno a ripetere, il mio era un modello..
Se provi a spiegarmi per bene come sono fatte le tabelle (posta le CREATE TABLE) e da dove vuoi leggere i dati, posso darti una mano..
altrimenti mi riesce difficile

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

i campi Giorni, Mese, Anno, DataPagamento, Gruppo e IDIndennità

Li prendo da combobox e textbox dal form così

objCommand.CommandText = "dbo.proc_IndennitàMensile"

objCommand.CommandType = CommandType.StoredProcedure

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Giorni", 30)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Mese", cboMese.Text)


' Parameter for the title column...
objCommand.Parameters.AddWithValue("@Anno", txtAnno.Text)


' Parameter for the price column...
objCommand.Parameters.AddWithValue("@DataInserimento", cboData.Text).DbType _
= DbType.Date

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@DataPagamento", cboData.Text).DbType _
= DbType.Date

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@Gruppo", cboGruppo.Text)

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@IDIndennità", "IDUtente" & cboData.Text)

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@FineMissione", "No")


l'unico campo che preleva dalla Tabella Anagrafica e IDUtent

Ciao e grazie per la pazienza
Mau67

alx_81 Profilo | Guru

Visto che proprio non mi vuoi passare le tue strutture me le invento
Eccoti un esempio:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

Non Avevo capito che dovevo passarti la struttura delle tabelle, scusa, adesso il codice cha hai scritto dove devo scriverlo dentro un form o in una store procedure?
SCUSA Ma sono un principiante come avrai capito

Adesso ti inserisco le strutture delle tabelle

TABELLA INDENNITA (questa è la tabella che riceve i dati dalle altre tabelle che seguino sotto)

GO
/****** Object: Table [dbo].[Indennità] Script Date: 09/16/2008 22:21:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Indennità](
[IDIndennità] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[IDUtente] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Giorni] [int] NULL,
[Ore] [int] NULL,
[Importo] [decimal](18, 2) NULL,
[FondoCredito] [decimal](18, 2) NULL,
[ContoEntrTesoro] [decimal](18, 2) NULL,
[Irpef] [decimal](18, 2) NULL,
[Mese] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Anno] [int] NULL,
[Motivo] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[DataPagamento] [smalldatetime] NULL,
[Gruppo] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
CONSTRAINT [PK_Indennità] PRIMARY KEY CLUSTERED
(
[IDIndennità] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

___________________________________________________________________________________________________________________________

TABELLA ANAGRAFICA (qui interessa solo in campo IDUtente filtrando i dati come descritto precedentemente)

GO
/****** Object: Table [dbo].[Anagrafica] Script Date: 09/16/2008 22:11:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Anagrafica](
[IDUtente] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[CodiceFiscale] [varchar](16) COLLATE Latin1_General_CI_AS NULL,
[IDGrado] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Grado] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Cognome] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Nome] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[LuogoNascita] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[DataNascita] [smalldatetime] NULL,
[Indirizzo] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Residenza] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[CodEnte] [varchar](5) COLLATE Latin1_General_CI_AS NULL,
[EnteAppartenenza] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[IndirizzoEnte] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[CapEnte] [varchar](5) COLLATE Latin1_General_CI_AS NULL,
[LuogoEnte] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[IstitutoCredito] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Agenzia] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[IndirizzoIstituto] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[LuogoIstituto] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Cap] [varchar](5) COLLATE Latin1_General_CI_AS NULL,
[Prov] [varchar](2) COLLATE Latin1_General_CI_AS NULL,
[PaeseCoord] [varchar](2) COLLATE Latin1_General_CI_AS NULL,
[CinEstero] [varchar](2) COLLATE Latin1_General_CI_AS NULL,
[Cin] [varchar](1) COLLATE Latin1_General_CI_AS NULL,
[Abi] [varchar](5) COLLATE Latin1_General_CI_AS NULL,
[Cab] [varchar](5) COLLATE Latin1_General_CI_AS NULL,
[CC] [varchar](12) COLLATE Latin1_General_CI_AS NULL,
[ForzaArmata] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Categoria] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[LivParCod] [varchar](10) COLLATE Latin1_General_CI_AS NULL,
[Sistema] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
[Pagamento] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
[PagamentoFV] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
[Missione] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[CodMissione] [int] NULL,
[InizioMissione] [smalldatetime] NULL,
[FineMissione] [varchar](2) COLLATE Latin1_General_CI_AS NULL,
[Gruppo] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[DataInserimento] [smalldatetime] NULL,
CONSTRAINT [PK_Anagrafica] PRIMARY KEY CLUSTERED
(
[IDUtente] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF



TABELLA GRADI (qui interessano i campi importo e irpef relazionato con la tabella anagrafica da ANAGRAFICA.IDGrado e GRADO.IDGrado da inserire nella tabella indennita )


GO
/****** Object: Table [dbo].[Gradi] Script Date: 09/16/2008 22:22:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Gradi](
[IDGrado] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Grado] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[ForzaArmata] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Categoria] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[Ordine] [int] NULL,
[LivParCod] [varchar](10) COLLATE Latin1_General_CI_AS NULL,
[GradoEcon] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[Importo] [decimal](18, 2) NULL,
[Irpef] [decimal](18, 2) NULL,
CONSTRAINT [PK_Gradi] PRIMARY KEY CLUSTERED
(
[IDGrado] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF


TABELLA TASSAZIONE (qui interessano i campi FONDOCREDITO E CONTOENTRATATESORO relazionata con la tabella anagrafica con i campi ANAGRAFICA.SISTEMA e TASSAZIONE.SISTEMA da inserire nella tabella indennita )


GO
/****** Object: Table [dbo].[Tassazione] Script Date: 09/16/2008 22:25:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Tassazione](
[IDRitenute] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Sistema] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
[FondoCredito] [decimal](18, 2) NULL,
[ContoEntrataTesoro] [decimal](18, 2) NULL,
CONSTRAINT [PK_Tassazione] PRIMARY KEY CLUSTERED
(
[IDRitenute] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF


TABELLA MISSIONE (qui interessa solo il campo OREOMNICOMPRENSIVA relazionata con la tabella anagrafica con ANAGRAFICA.CODMISSIONE e MISSIONE.MISSIONE da inserire nella tabella indennita )


GO
/****** Object: Table [dbo].[Missione] Script Date: 09/16/2008 22:28:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Missione](
[IDMissione] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Missione] [int] NOT NULL,
[DescrizioneMissione] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[OreOmnicomprensiva] [int] NULL,
[Forfettaria] [decimal](18, 2) NULL,
[Gruppo] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
CONSTRAINT [PK_Missione] PRIMARY KEY CLUSTERED
(
[IDMissione] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF



I restanti campi della Tabella Indennita e cioè

Giorni, Mese, Anno, Motivo, DataPagamento e Gruppo vanno inseriti con le textbox e combobox che ti ho postato precedentemente e che si trovano all'interno del form.

Grazie della pazienza ciao
Mau67

alx_81 Profilo | Guru

>Non Avevo capito che dovevo passarti la struttura delle tabelle,
>scusa, adesso il codice cha hai scritto dove devo scriverlo dentro
>un form o in una store procedure?
Non ti preoccupare.. comunque sono riuscito a farti l'esempio, non c'è problema

Prendi il mio ultimo post, copia ed incolla tutto il codice e provalo su sql server (Usa una nuova query).
Se gli dai una letta vedrai che è semplice.
E noterai che c'è proprio la CREATE PROCEDURE..
Tu devi prendere spunto da quella.. il resto serve a me per la creazione delle tabelle, per la consultazione dei dati, ecc.
Mi raccomando, quando usi quel codice, lascia tutto com'è.. comprese le prime righe (USE tempdb;) perchè ti permettono di usare quel database per le prove (altrimenti rischi di buttare i tuoi oggetti se usi il tuo db).
Fammi sapere..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

OK Funziona tutto ad eccezione che IDIndennità della tabella Indennità è una chiave primaria e quindi la store procedure dovrebbe generarmi il codice univoco con IDUtente e la data di pagamento ti posto il codice dellaCODICE STORE PROCEDURE FUNZIONANTE


ALTER PROCEDURE dbo.proc_IndennitàMensile
@Giorni tinyint
, @Mese varchar(25)
, @Anno smallint
, @DataPagamento smalldatetime
, @Gruppo varchar(50)
, @IDIndennità varchar(50)
, @DataInserimento smalldatetime
, @FineMissione char(2)
AS
BEGIN

SET NOCOUNT ON;

INSERT INTO Indennità (IDUtente, Giorni, Mese, Anno, DataPagamento, Gruppo, IDIndennità)
SELECT
IDUtente
, @Giorni
, @Mese
, @Anno
, @DataPagamento
, @Gruppo
, @IDIndennità
FROM
dbo.Anagrafica
WHERE
DataInserimento = @DataInserimento
AND Gruppo = @Gruppo
AND FineMissione = 'No'


END

Ciao grazie
Mau67

alx_81 Profilo | Guru

>OK Funziona tutto ad eccezione che IDIndennità della tabella
>Indennità è una chiave primaria e quindi la store procedure dovrebbe
>generarmi il codice univoco con IDUtente e la data di pagamento
>ti posto il codice dellaCODICE STORE PROCEDURE FUNZIONANTE
Ma allora, se l'IDIndennita devi calcolarlo, perchè lo passi come parametro?

>ALTER PROCEDURE dbo.proc_IndennitàMensile
> @Giorni tinyint
>, @Mese varchar(25)
>, @Anno smallint
>, @DataPagamento smalldatetime
>, @Gruppo varchar(50)
-- , @IDIndennità varchar(50) Eliminalo
>, @DataInserimento smalldatetime
>, @FineMissione char(2)
>AS
>BEGIN
>
> SET NOCOUNT ON;

DECLARE @IDIndennita varchar(50)

SELECT @IDIndennita = IDUtente + CAST(YEAR(@DataPagamento) AS char(4)) + RIGHT('00' + CAST(MONTH(@DataPagamento) AS varchar(2)),2) + RIGHT('00' + CAST(DAY(@DataPagamento) AS varchar(2)),2)

>INSERT INTO Indennità (IDUtente, Giorni, Mese, Anno, DataPagamento,
>Gruppo, IDIndennità)
> SELECT
> IDUtente
> , @Giorni
> , @Mese
> , @Anno
> , @DataPagamento
> , @Gruppo
> , @IDIndennita -- CALCOLATO SOPRA
> FROM
> dbo.Anagrafica
> WHERE
> DataInserimento = @DataInserimento
> AND Gruppo = @Gruppo
> AND FineMissione = 'No'
>
>
>END

>Ciao grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mau67 Profilo | Expert

Fuziona tutto ti ringrazio per la pazienza e le tempestive risposte

Grazie
Mau67

alx_81 Profilo | Guru

>Fuziona tutto ti ringrazio per la pazienza e le tempestive risposte
di nulla, l'importante è che vada

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5