Query sql

domenica 07 novembre 2004 - 16.27

mon78 Profilo | Junior Member

Ciao a tutti; ho una web form con delle caselle di testo e un pulsante; l'utente riempie le caselle di testo e clicca sul pulsante; a questo punto si deve eseguire un query sql che inserisce una riga in una tabella(PROGETTO) di un database sql e mi deve estrarre l'id del progetto appena inserito; ho creato una transazione sql fatta così:

CREATE PROCEDURE inserisciprogetto
@nome nvarchar(50),
@datai datetime,
@dataf datetime,
@datac datetime,
@StatoAvanzamento nvarchar(50),
@Descrizione nvarchar(1050),
@id_progetto int output
AS
Begin Tran
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

INSERT INTO PROGETTO (nome, Dt_inizio, Dt_Fine, Dt_Creazione, StatoAvanzamento, Descrizione, Visibile)
VALUES (@nome, @datai, @dataf, @datac, @StatoAvanzamento, @Descrizione, '1')

select @id_progetto= (SELECT MAX(IDProgetto) from PROGETTO)

commit tran
GO

Nella web form in corrispondenza del clic del pulsante ho inserito questo codice:

string StringaConnessione = ConfigurationSettings.AppSettings["conn"];
//Apre la connessione al Database
SqlConnection cntDatabase= new SqlConnection(StringaConnessione);
cntDatabase.Open();
SqlCommand cmd= new SqlCommand("inserisciprogetto",cntDatabase);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@nome",TextBox1.Text);
cmd.Parameters.Add("@datai",TextBox2.Text);
cmd.Parameters.Add("@dataf",TextBox2.Text);
cmd.Parameters.Add("@StatoAvanzamento","");
cmd.Parameters.Add("@Descrizione",TextBox4.Text);
cmd.Parameters.Add("@datac",TextBox5.Text);
SqlParameter param=new SqlParameter("@idprogetto",SqlDbType.Int);
param.Direction = ParameterDirection.Output;
string progetto = (string)param.Value;
cmd.ExecuteNonQuery();
cntDatabase.Close();

Quando eseguo l'applicazione, nel browser internet explorer, al clic sul pulsante non avviene l'inserimento di una nuova riga nella tabella, e mi compare l'errore:

La procedura 'inserisciprogetto' richiede il parametro '@id_progetto', che non è stato specificato.

Nn capisco cosa devo fare; mi potete aiutare x favore? grazie mille

mon78 Profilo | Junior Member

Scusa ho sbagliato a scrivere l'ultima parte della query; nn è

select @id_progetto= (SELECT MAX(IDProgetto) from PROGETTO)

ma

set @id_progetto= (SELECT MAX(IDProgetto) from PROGETTO)

Brainkiller Profilo | Guru

Manca una parte.
Tu hai creato un nuovo SqlParametere con scritto appunto "new SqlParameter", ma ti sei dimenticato di aggiungerlo alla Collection e quindi ti segnala giustamente l'errore che non trova il parametro.

cmd.Parameters.Add("@idprogetto.... ecc.

Sto sbagliando io oppure dovrebbe funzionare così ?

Se non aggiungi tutti i parametri alla collection poi richiamando la Stored Procedure non li trova tutti e quindi non può valorizzare i valori di ritorno.

ciao
david

unodidue Profilo | Newbie

Io per farmi restituire in automatico un campo ID in una store procedure utilizzo l'istruzione @@IDENTITY, secondo me molto utile.

Ciao
Francesco
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5