12 messaggi dal 13 luglio 2010
Salve a tutti, ho questa stored procedure
ALTER PROCEDURE [dbo].[newsInsert]
  @titolo nvarchar(200),
  @testo text,
  @image bit = 0
AS
BEGIN
  SET NOCOUNT ON;
  INSERT INTO news (titolo, testo, image) VALUES (@titolo, @testo, @image)
  RETURN @@IDENTITY
END

Ed effettivamente da sql server management mi ritorna l'id autoincrementante

Da Asp.net ho


 protected void Page_Load(object sender, EventArgs e)
    {

    }
 protected void buttSubmit_Click(object sender, EventArgs e)
    {
       
SqlConnection conn = new SqlConnection(configuration.DbConnectionString);
SqlCommand s1 = new SqlCommand("newsInsert", conn);
s1.CommandType = System.Data.CommandType.StoredProcedure;
s1.CommandText = "newsInsert";
s1.Parameters.Add("@titolo", titolo);
s1.Parameters.Add("@testo", testo);
s1.Parameters.Add("@image", fu.HasFile);
            
conn.Open();
int res = (int)s1.ExecuteScalar();
conn.Close();

La stored procedure viene eseguita, perche' nella tabella compaiono i dati inseriti, ma il valore ritornato e' sempre null... qualcuno ha qualche idea?
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
autovideo ha scritto:

qualcuno ha qualche idea?

Ciao, sì! Il metodo .ExecuteScalar, per definizione, restituisce il valore contenuto nel primo campo della prima riga del resultset. La tua stored procedure non crea un resultset vero e proprio (cioè, non restituisce records mediante una SELECT) e quindi l'.ExecuteScalar non ha un valore da leggere.

Il valore di ritorno puoi ottenerlo grazie ad un parametro a cui hai impostato la .Direction a ReturnValue.

//Qui definisco il parametro. Basta settargli il tipo e la direzione.
var valoreDiRitorno = new SqlParameter {DbType=DbType.Int32, Direction=ParameterDirection.ReturnValue};
//Lo aggiungo alla collezione dei parametri, insieme agli altri che avevi già aggiunto prima...
s1.Parameters.Add(valoreDiRitorno);
//...eseguo la stored procedure. Posso usare .ExecuteNonQuery dato che non produce alcun resultset
s1.ExecuteNonQuery();
//... e infine leggo il valore del parametro!
var risultato = valoreDiRitorno.Value;


ciao
Modificato da BrightSoul il 02 febbraio 2012 20.55 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.