Obtenir plusieurs valeurs à partir de la database ASP.NET/C#

J'essaie d'get / returnner plusieurs valeurs à partir d'une database SQL-Server en utilisant et les afficher sur une page ASP.NET.

J'utilise une procédure stockée pour exécuter la command SELECT du côté de la database.

Je suis capable de returnner la première valeur qui correspond à la variable @PERSON mais une seule ligne est renvoyée à chaque fois.

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

Classe de gestionnaire de database

public MainSQL() { _productConn = new SqlConnection(); _productConnectionSsortingng += "data source=mssql.database.co.uk;InitialCatalog=test_data;User ID=username;Password=password"; _productConn.ConnectionSsortingng = _productConnectionSsortingng; } public ssortingng GetItemName(int PersonID) { ssortingng returnvalue = ssortingng.Empty; SqlCommand myCommand = new SqlCommand("GetItem", _productConn); myCommand.CommandType = CommandType.StoredProcedure; myCommand.Parameters.Add(new SqlParameter("@PERSON", SqlDbType.Int)); myCommand.Parameters[0].Value = PersonID; _productConn.Open(); returnvalue = (ssortingng)myCommand.ExecuteScalar(); _productConn.Close(); return (ssortingng)returnvalue; } 

Procédure stockée

 USE [test_data] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [ppir].[GetItem] ( @PERSON int ) AS /*SET NOCOUNT ON;*/ SELECT Description FROM [Items] WHERE PersonID = @PERSON RETURN 

return.aspx

 namespace test { public partial class Final_Page : System.Web.UI.Page { MainSQL GetInfo; protected void Page_Load(object sender, EventArgs e) { int PersonId = (int)Session["PersonID"]; GetInfo = new MainSQL(); ssortingng itemname = GetInfo.GetItemName(PersonId); ReturnItemName.Text = itemname; } // End Page_Load } // End Class } // End Namespace 

vous devriez utiliser sql datareader à la place:

ExecuteScalar vous renvoie uniquement le premier résultat tandis que le lecteur vous renvoie chaque résultat par boucle jusqu'à reader.Read () == false.

par exemple :

  DataReader data_reader= MySqlCommand.ExecuteReader( ); while(data_reader.Read()) { ... } 

Je modifie votre méthode GetItem comme ceci:

 public List<ssortingng> GetItemName(int PersonID) { List<ssortingng> returnvalues = new List<ssortingng>(); SqlCommand myCommand = new SqlCommand("GetItem", _productConn); myCommand.CommandType = CommandType.StoredProcedure; myCommand.Parameters.Add(new SqlParameter("@PERSON", SqlDbType.Int)); myCommand.Parameters[0].Value = PersonID; _productConn.Open(); DataReader dr = myCommand.ExecuteReader(); While(dr.Read() ) { returnvalues.Add(dr[0].ToSsortingng()); } _productConn.Close(); return returnvalues; } 

Votre procédure stockée renvoie-t-elle une ligne pour l'ID ou renvoie-t-elle plusieurs lignes? En fin de count, vous aurez besoin de boucle sur vos résultats. Si la procédure stockée renvoie un logging par appel, vous devez effectuer une boucle sur les ID de la page ASPX. Si la procédure stockée renvoie plusieurs lignes, vous pouvez utiliser et sqlDataReader au lieu de l'appel ExecuteScalar. Bouclez les lignes qui ont été renvoyées et ajoutez-les à une sorte de collection ou de list. Puis returnnez le sur votre page. Cependant, vous devrez toujours modifier votre page aspx pour gérer la collection.

Vous pouvez utiliser un SQLDataReader ou un SQLDataAdapter pour remplir un DataSet , bien que pour les formulaires Web, vous pourriez être mieux servi en séparant entièrement votre access aux données de votre page en utilisant un object ObjectDataSource .