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
ASP.NET 2.0 / 3.5 / 4.0
Errore Incorrect syntax near 'nome funzione'
venerdì 08 aprile 2011 - 15.21
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 2.0
|
Visual Studio 2005
|
SQL Server 2008 R2
mattekr
Profilo
| Newbie
16
messaggi | Data Invio:
ven 8 apr 2011 - 15:21
Ciao a tutti, sto facendo un po di sperimentazione con SQL Server 2008.
A tal proposito ho creato una Stored Procedure che si occupa di inserire in tabella e di ritornare l'ID del record appena inserito
USE [NomeDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Inserisci_I]
@ID_I INT OUTPUT,
@Me VARCHAR(20),
@Me_Ca VARCHAR(20),
@De VARCHAR(255),
@C_T_I INT,
@In VARCHAR(255),
@CP VARCHAR(10),
@Cm VARCHAR(100),
@C_P INT,
@Te VARCHAR(20) = NULL,
@Fa VARCHAR(20) = NULL,
@Ma VARCHAR(100) = NULL
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Istituti
([Me],
[Me Ca],
[De],
[C T I],
[In],
[CP],
[Cm],
[C P],
[Te],
[Fa],
[Ma])
VALUES (@Me,
@Me_Ca,
@De,
@C_T_I,
@In,
@CP,
@Co,
@C_P,
@Te,
@Fa,
@Ma);
SET @ID_I = (SELECT @@IDENTITY);
END
Se chiamo la SP da Management Studio funziona correttamente, senza alcun problema.
Mentre se utilizzo il seguente codice da una pagina asp
string strConnection = Application["StrConnection"].ToString();
SqlConnection myConnection = new SqlConnection(strConnection);
myConnection.Open();
SqlCommand myCommand = new SqlCommand("Inserisci_I", myConnection);
myCommand.Parameters.Add("@Me", SqlDbType.VarChar).Value = "3";
myCommand.Parameters.Add("@Me_Ca", SqlDbType.VarChar).Value = "2";
myCommand.Parameters.Add("@De", SqlDbType.VarChar).Value = "3";
myCommand.Parameters.Add("@C_T_I", SqlDbType.Int).Value = 4;
myCommand.Parameters.Add("@In", SqlDbType.VarChar).Value = "5";
myCommand.Parameters.Add("@CP", SqlDbType.VarChar).Value = "6";
myCommand.Parameters.Add("@Co", SqlDbType.VarChar).Value = "7";
myCommand.Parameters.Add("@C_P", SqlDbType.Int).Value = 8;
myCommand.Parameters.Add("@Te", SqlDbType.VarChar).Value = "9";
myCommand.Parameters.Add("@Fa", SqlDbType.VarChar).Value = "10";
myCommand.Parameters.Add("@Ma", SqlDbType.VarChar).Value = "11";
SqlParameter IDIstituto = new SqlParameter("@ID_I", SqlDbType.Int);
IDIstituto.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(IDIstituto);
myCommand.ExecuteNonQuery();
TextBox1.Text = myCommand.Parameters["@ID_I"].Value.ToString();
myConnection.Close();
mi ritorna l'errore "Incorrect syntax near 'Inserisci_I'.
Dove sbaglio?
Grazie, ciao
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
ven 8 apr 2011 - 15:43
Ciao
Credo che anche senza dichiarare il parametro di output si possa avere l'ultimo ID facendo al posto di SET =
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];
RETURN [SCOPE_IDENTITY]
Prova e fammi sapere
Ciao
alexmed
mattekr
Profilo
| Newbie
16
messaggi | Data Invio:
ven 8 apr 2011 - 15:58
Ciao, grazie per la risposta.
Ho provato ad utilizzare il tuo suggerimento ma il problema persiste.
Mi sono dimenticato di dire che l'istruzione che da errore è:
myCommand.ExecuteNonQuery();
Grazie, ciao.
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
ven 8 apr 2011 - 16:02
Usa "ExecuteScalar"
http://support.microsoft.com/kb/308049/it
Ciao
alexmed
mattekr
Profilo
| Newbie
16
messaggi | Data Invio:
ven 8 apr 2011 - 16:10
Ciao, stesso errore anche con quel metodo. Mi sono letto anche tutto l'interessante articolo. Sembrerebbe che anche ExecuteNonQuery vada bene per quello che devo fare.
Adesso provo a semplificare la SP, diminiusco il numero di parametri e provo ad evitare di far tornare un valore. Spero così di capire dove si trova l'anomalia.
grazie, ciao.
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
ven 8 apr 2011 - 16:35
...
myCommand.Parameters.Add(IDIstituto);
newID As Integer = myCommand.ExecuteScalar();
TextBox1.Text = newID
myConnection.Close();
...
alexmed
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
ven 8 apr 2011 - 17:31
Ciao
Stavo riguardando il codice ... prova ad utilizzare questa procedura per eseguire la stored
Nel primao post:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=38844
Perchè in effetti non hai mai specificato che devi eseguire una stored
Ciao
alexmed
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 11 apr 2011 - 10:24
>Ciao
Ciao,
devi indicare che si tratta di una sp:
Comando.CommandType = CommandType.StoredProcedure
Quoto alexmed
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
mattekr
Profilo
| Newbie
16
messaggi | Data Invio:
lun 11 apr 2011 - 10:48
Grazie mille a entrambi, aggiungendo
Comando.CommandType = CommandType.StoredProcedure;
tutto funziona correttamente!
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 11 apr 2011 - 11:48
>Grazie mille a entrambi,
accetta la risposta di alexmed
, perchè ti ha fatto notare anche un'altra cosa che vorrei approfondire ora.
Attenzione ad usare @@IDENTITY rispetto SCOPE_IDENTITY().
La prima ti torna l'ultima identità inserita effettivamente in tutta l'eventuale nidificazione di transazioni. Mi spiego meglio..
prendi l'esempio di una tabella con identity che lancia successivamente un trigger che, al suo interno, inserisce un'altra identity in una ulteriore tabella.
@@IDENTITY torna l'id inserito nella tabella all'interno dell trigger. Quindi l'ultimo della transazione globale.
SCOPE_IDENTITY() invece è quello di contesto, quello della transazione corrente, quindi torna quello della tabella che invoca la insert.
Quindi attenzione
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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 !