3 votes

Retourner des données du serveur SQL à l'aide d'une procédure stockée

J'ai des difficultés à renvoyer des données de ma base de données sql-server vers une page aspx en utilisant une procédure stockée et j'espérais que quelqu'un pourrait m'indiquer où je me trompe.

Lorsque j'exécute le projet, les données sont entrées avec succès dans la table mais rien n'est renvoyé sur la page suivante (Confirm.aspx)

Confirmer.aspx.cs

using Devworks;

namespace OSQARv0._1
{
    public partial class Confirm_Questionnaire : System.Web.UI.Page
    {
        OscarSQL b;

        protected void Page_Load(object sender, EventArgs e)
        {
            b = new OscarSQL();
            string qstname = b.GetQuestionName();
            ReturnQstID.Text = qstname;          

        }// End Page_Load

    } // Emd Class Confirm_Questionnaire

} // End Namespace

SQL.cs (Code de l'application)

public OscarSQL()
        {
            _productConn = new SqlConnection();
            _productConnectionString += "data source=mssql.database.co.uk; Initial Catalog=devworks_oscar;User ID=username;Password=password";
            _productConn.ConnectionString = _productConnectionString;
        }
    public string GetQuestionName()
            {
                SqlCommand myCommand = new SqlCommand("GetQuestion", _productConn);
                myCommand.CommandType = CommandType.StoredProcedure;
                SqlParameter retval = myCommand.Parameters.Add("@QUESTTEXT", SqlDbType.VarChar);
                retval.Direction = ParameterDirection.Output;
                _productConn.Open();
                string returnvalue = (string)myCommand.Parameters["@QUESTTEXT"].Value;
                _productConn.Close();
                return returnvalue;
            }

Procédure stockée

USE [devworks_oscar]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [hgomez].[GetQuestion]  

AS
    /*SET NOCOUNT ON;*/
    SELECT QuestionText FROM [Questions] WHERE QuestionnaireID = 21
    RETURN

Toute aide serait très appréciée.

8voto

McKay Points 7281

Tu n'exécutes pas la procédure. Vous la mettez en place, mais ne la renvoyez pas.

string returnvalue = (string)myCommand.ExecuteScalar();

4voto

adrift Points 24386

Votre procédure stockée n'utilise pas de paramètre de sortie pour renvoyer une valeur, alors utilisez plutôt ExécuterScalaire() :

string returnvalue = (string)myCommand.ExecuteScalar();

1voto

Jon Raynor Points 2312

La valeur de retour est ce que la procédure stockée renvoie. Il s'agit généralement d'une valeur entière, mais elle est parfois utilisée pour piloter la logique métier ou les conditions d'erreur. Dans votre cas, vous voulez les données qui sont retournées, pas la valeur de retour. Utilisez donc ExecuteScalar si la requête renvoie une valeur unique ou ExecuteReader si la requête renvoie un ou plusieurs enregistrements de données. ExecuteNonQuery est généralement utilisé pour les opérations d'insertion/mise à jour et/ou de suppression.

1voto

DJ KRAZE Points 8546
ExecuteScalar() is a good idea if you know there is only one occurance of that record in the database, ExecuteScalar if I am not mistaken only returns the first record or occurance it finds.. you could use a datareader and do datareader.ExecuteReader() this is forward only but there are ways to make it biDirectional hehe... :) anyway if you want to loop thru the results use ExecuteReader() if you want to execute a StoredProceduere with UDATE,DELETE, or INSERT use reader.ExecuteNonQuery().

Hope this helps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X