簡體   English   中英

從數據庫ASP.NET/C#獲取多個值

[英]Get Multiple Values From Database ASP.NET/C#

我正在嘗試使用SQL Server數據庫獲取/返回多個值,並將其顯示在ASP.NET頁上。

我正在使用存儲過程在數據庫端執行SELECT命令。

我能夠返回與變量@PERSON匹配的第一個值,但每次僅返回一行。

任何幫助將非常感激。

數據庫處理程序類

public MainSQL()
{
       _productConn = new SqlConnection();
       _productConnectionString += "data source=mssql.database.co.uk;InitialCatalog=test_data;User ID=username;Password=password";
       _productConn.ConnectionString = _productConnectionString;
}
public string GetItemName(int PersonID)
{
     string returnvalue = string.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 = (string)myCommand.ExecuteScalar();             
     _productConn.Close();
     return (string)returnvalue;
 }

儲存程序

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();
            string itemname = GetInfo.GetItemName(PersonId);
            ReturnItemName.Text = itemname;

        } // End Page_Load

    } // End Class 

} // End Namespace

您應該改用sql datareader。

ExecuteScalar僅返回第一個結果,而Reader則循環循環返回每個結果,直到reader.Read()== false為止。

例如:

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

我這樣更改您的GetItem方法:

public List<string> GetItemName(int PersonID)
{
   List<string> returnvalues = new List<string>();
   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].ToString()); 
   }         

   _productConn.Close();
   return returnvalues;
 }

您的存儲過程是返回ID的一行還是返回多行? 最終,您將需要遍歷結果。 如果存儲過程每次調用返回一條記錄,則需要遍歷aspx頁中的id。 如果存儲過程返回多行,則可以使用和sqlDataReader代替ExecuteScalar調用。 循環返回的行,並將其添加到某種類型的集合或列表中。 然后將其返回到您的頁面。 但是,您仍然必須修改aspx頁面以處理集合。

你可以使用一個SqlDataReader的 ,或SqlDataAdapter的填寫一個DataSet ,雖然對於web表單,你可能會更好地通過完全由使用的方式分離您的網頁數據訪問服務的ObjectDataSource

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM