VB.NET ED SQLSERVER - Errore a seguito di StoredProcedure

domenica 20 giugno 2010 - 19.45

86Marco Profilo | Expert

Salve nella mia applicazione VB.net ho due tabelle cosi impostate:

TABELLA: ContiCorrenti (idconto (int-identità, IntestatarioConto (varchar))

TABELLA: MovimentazioneConto (idmov, Descrizione, Entrate, Uscite, idconto (chiave esterna alla tabella ContiCorrenti)

Effettuo tramite i diagrammi le relazioni alle due tabelle.

Ho infine una sp che mi dovrebbe prendere dei parametri da dei controlli di un form per poi inserirli nella tabella movimetazione.
La stored procedue è questa:

ALTER PROCEDURE dbo.InsertMovimentazione
@Descrizione varchar,
@Entrate money,
@Uscite money,
@idconto varchar

AS

Insert into MovimentazioneConto (Descrizione, Entrate, Uscite, idconto)
values (@Descrizione, @Entrate, @Uscite, @idconto)

RETURN

Questo è il codice che utilizzo al click del button sul form

Dim con As New SqlConnection
con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"

Dim cmd As New SqlCommand
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "InsertMovimentazione"

cmd.Parameters.AddWithValue("Descrizione", TextBox1.Text)
cmd.Parameters.AddWithValue("Entrate", TextBox2.Text)
cmd.Parameters.AddWithValue("Uscite", TextBox3.Text)
cmd.Parameters.AddWithValue("idconto", ComboBox1.SelectedValue)

con.Open()
cmd.Connection = con
cmd.ExecuteNonQuery()
con.Close()

Mi viene però restituito il seguente errore:
L'istruzione INSERT è in conflitto con il vincolo FOREIGN KEY "FK_MovimentazioneConto_ContiCorrenti". Il conflitto si è verificato nella tabella "dbo.ContiCorrenti", column 'idconto' del database "C:\USERS\MARCO\DESKTOP\WINDOWSAPPLICATION1\WINDOWSAPPLICATION1\BIN\DEBUG\DATABASE1.MDF". L'istruzione è stata interrotta.

VI PREGO E' UNA COSA ESTREMAMENTE IMPORTANTE. SPERO POSSIATE VELOCEMENTE RISPONDERMI.
E' un pomeriggio intero che sto uscendo pazzo.

Grazie mille a tutti.

lbenaglia Profilo | Guru

>Mi viene però restituito il seguente errore:
>L'istruzione INSERT è in conflitto con il vincolo FOREIGN KEY
>"FK_MovimentazioneConto_ContiCorrenti". Il conflitto si è verificato
>nella tabella "dbo.ContiCorrenti", column 'idconto' del database
>"C:\USERS\MARCO\DESKTOP\WINDOWSAPPLICATION1\WINDOWSAPPLICATION1\BIN\DEBUG\DATABASE1.MDF".
>L'istruzione è stata interrotta.
>
>VI PREGO E' UNA COSA ESTREMAMENTE IMPORTANTE. SPERO POSSIATE
>VELOCEMENTE RISPONDERMI.
>E' un pomeriggio intero che sto uscendo pazzo.

Stai semplicemente inserendo una riga nella tabella dbo.MovimentazioneConto riferita ad un idconto non presente nella tabella dbo.ContiCorrenti, ed avendo definito un vincolo di FK l'operazione viene giustamente interrotta.
Come risolvere? Inserisci quell'idconto nella tabella dbo.ContiCorrenti prima di tentare di inserirlo in dbo.MovimentazioneConto.

>Grazie mille a tutti.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

86Marco Profilo | Expert

Ei ciao e grazie per la supervelocità.

Tecnicamente ho già all'interno della tabella IDCONTO due recordo:

idconto Intestatario
2222 Pinco Pallino
1111 Tizio

Nonostante io passi il valore idconto sulla storedProcedure il risultato è sempre lo stesso.
Cioè errore!!
Come mai secondo te?

lbenaglia Profilo | Guru

>Ei ciao e grazie per la supervelocità.
>
>Tecnicamente ho già all'interno della tabella IDCONTO due recordo:
>
>idconto Intestatario
>2222 Pinco Pallino
>1111 Tizio
>
>Nonostante io passi il valore idconto sulla storedProcedure il
>risultato è sempre lo stesso.
Quale valore? Se passi 1111 o 2222 non ci sono problemi, se passi 3333 i problemi ci sono eccome

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

86Marco Profilo | Expert

E' propio per questo che sto uscendo pazzo :)
Questa è la mia tabella

286x146 18Kb




Ho provato anche semplicemente passandogli i parametri da codice in questa maniera

Dim con As New SqlConnection
con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"

Dim cmd As New SqlCommand
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "InsertMovimentazione"

cmd.Parameters.AddWithValue("Descrizione", "Bonifico ricevuto")
cmd.Parameters.AddWithValue("Entrate", 1222)
cmd.Parameters.AddWithValue("Uscite", 0)
cmd.Parameters.AddWithValue("idconto", "2222")

con.Open()
cmd.Connection = con
cmd.ExecuteNonQuery()
con.Close()

Ma il problema è esattamente lo stesso!!!!!
Come te lo spieghi :) ??

lbenaglia Profilo | Guru

>Come te lo spieghi :) ??
Con i dati che hai postato non me lo spiego.
Eseguendo la sp da SSMS hai problemi?
Se la risposta è no, allora i problemi li hai lato client e qui non ti posso aiutare, se invece li hai significa che non hai postato tutte le informazioni e ci nascondi qualcosa

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

86Marco Profilo | Expert

ehehe si :)
le informazioni di errore (lo stesso errore) l'ho pure se esegui la sp dal tools grafico!!! :)

Questo è quello che ho fatto :)

1) Ho creato le due tabelle:

ContiCorrenti:
numeroconto - varchar - chiave primaria
IntestatarioConto - varchar

MovimentiConto:
idmovimento - varchar - chiave primaria - colonna identità
Descrizione - varchar
Entrate - money
Uscite - money
numeroconto - varchar

2) Creo le relazioni tra le due tabelle, in particolare creando i diagrammi creo la relazione tra numeroconto di conticorrenti e movimenticonto.

3) Creo la storedprocedure e la cerco di eseguire tramite vb (come nel codice sopra).

Nonostante io abbia dentro la tabella conticorrente due record con un numeroconto già presente, sulla tabella movimenticonto mi restiuisce sempre l'errore!!!! XCHE

86Marco Profilo | Expert

Risolto!!!
ho proprio risolto un minuto fa! :)

in SQL effettivamente mi faceva la insert.
Il problema era di sintassi nel senso che come paramtri della SP settavo varchar senza dichiararare la dimensione :)
CIo mi causava l'errore poichè se inserivo come numeroconto = 1122 esendo varchar mi inseriva solo il primo valore cioè 1, restiuendomi un errore poichè non esisteva un record correlato OVVIAMENTE :)

Grazie!
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