Errore di sintassi !! .... ma dove ?

lunedì 16 marzo 2009 - 19.07

skraus Profilo | Junior Member

Ho creato questa sp in sql Srv 2k

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

quando richiamo l'esecuzione della stessa mediante un SqlCommand (.NET) alla chiamata del metodo viene generata l'eccezione
Line 1: Incorrect syntax near 'TMP_DIVIDI_TAB_CORSI'.

Ho provato anche a monitorare l'attività del server Sql con il profiler l'istruzione che viene lanciata prima della generazione dell'eccezione è la seguente:
exec sp_executesql
N'TMP_DIVIDI_TAB_CORSI',
N'@idCorso int,@ente nvarchar(50),@codEnte nvarchar(50),@fse bit,@annoFse smallint,@postiOb2 tinyint,@postiDonne tinyint,@asse char(1),@misura tinyint,@ob char(3),@dataSelezione smalldatetime',
@idCorso = 118, @ente = N'REGIONE UMBRIA', @codEnte = N'PG.03.03.33.004', @fse = 0, @annoFse = 1900, @postiOb2 = 0, @postiDonne = 0, @asse = '-', @misura = 0, @ob = '---', @dataSelezione = 'Jan 1 1900 12:00AM'

L'ho provata ad incollare nel query analyzer. Se eseguo il parsing dell'istruzione nessun errore se la mando in esecuzione mi genera l'eccezione di cui sopra.
Ho provato ad eseguire la sp direttamente con il query analyzer inserendo i medesimi valori manualmente ed il record viene creato correttamente.

Ci deve essere un errore banale che non riesco a vedere.

alx_81 Profilo | Guru

>quando richiamo l'esecuzione della stessa mediante un SqlCommand
>(.NET) alla chiamata del metodo viene generata l'eccezione
>Line 1: Incorrect syntax near 'TMP_DIVIDI_TAB_CORSI'.
Ciao, puoi postare il codice .net che usi per lanciare la stored?

--

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

skraus Profilo | Junior Member

La l'esecuzione delle sp viene richiamanta mediante un metodo di una classe. Quello che segue è il codice che definisce il metodo.

Grazie

public bool saveToDb(string strCn) { int result = 0; bool blnResut = false; SqlConnection cn = new SqlConnection(strCn); if (cn.State == System.Data.ConnectionState.Closed) { cn.Open(); } SqlCommand cmd = new SqlCommand("TMP_DIVIDI_TAB_CORSI", cn); cmd.Parameters.Add("@idCorso", SqlDbType.Int); cmd.Parameters.Add("@ente", SqlDbType.NVarChar, 50); cmd.Parameters.Add("@codEnte", SqlDbType.NVarChar, 50); cmd.Parameters.Add("@fse", SqlDbType.Bit); cmd.Parameters.Add("@annoFse", SqlDbType.SmallInt); cmd.Parameters.Add("@postiOb2", SqlDbType.TinyInt); cmd.Parameters.Add("@postiDonne", SqlDbType.TinyInt); cmd.Parameters.Add("@asse", SqlDbType.Char, 1); cmd.Parameters.Add("@misura", SqlDbType.TinyInt); cmd.Parameters.Add("@ob", SqlDbType.Char, 3); cmd.Parameters.Add("@dataSelezione", SqlDbType.SmallDateTime); cmd.Parameters["@idCorso"].Value = this.id; cmd.Parameters["@ente"].Value = this.ente; cmd.Parameters["@codEnte"].Value = this.codiceEnte; cmd.Parameters["@fse"].Value = this.fse; cmd.Parameters["@annoFse"].Value = this.anno; cmd.Parameters["@postiOb2"].Value = this.postiOb2; cmd.Parameters["@postiDonne"].Value = this.postiDonne; cmd.Parameters["@asse"].Value = this.asse; cmd.Parameters["@misura"].Value = this.misura; cmd.Parameters["@ob"].Value = this.obiettivo; cmd.Parameters["@dataSelezione"].Value = this.dataSelezione; try { result = cmd.ExecuteNonQuery(); blnResut = true; } catch (Exception ex) { MessageBox.Show("Si è verificato un errore nella scrittura dei dati sul db. \n" + ex.Message + " \n" + ex.Source); } cn.Close(); cn = null; return blnResut; }

skraus Profilo | Junior Member

Ho risolto. Avevo dimenticato di valorizzare la proprietà CommandType dell'istanza di SqlCommand.

Lo avevo detto che era qualcosa di banale.

Grazie, cmq, ciao

alx_81 Profilo | Guru

>Ho risolto. Avevo dimenticato di valorizzare la proprietà CommandType
>dell'istanza di SqlCommand.
Era proprio come pensavo, perchè se non imposti tale proprietà il ado.net prova ad eseguire un comando SQL Text, e quindi non riuscendo a parserizzare il comando, dà errore di sintassi. O imposti il tipo di comando oppure usi il T-sql per richiamare la sp (cosa poco ortodossa), ovvero con EXEC nomepro <parametri>.
Comunque la soluzione corretta l'hai trovata da solo
ciao!

--

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