2011-11-12 28 views
2

我試圖從SQL-Server數據庫中獲取/返回多個值,並將它們顯示在ASP.NET頁面上。從數據庫獲取多個值ASP.NET/C#

我正在使用存儲過程在數據庫端執行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 

回答

3

您應該使用sql datareader來代替:

ExecuteScalar只會返回第一個結果,而reader會通過循環返回每個結果,直到 reader.Read()== false。

例如:

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

您的存儲過程爲id返回一行還是返回多行?最終,你需要循環你的結果。如果存儲過程每次調用返回一個記錄,則需要遍歷aspx頁面中的id。如果存儲過程返回多行,則可以使用和sqlDataReader而不是ExecuteScalar調用。循環返回的行並將它們添加到某種集合或列表中。然後將其返回到您的頁面。不過,您仍然需要修改您的aspx頁面來處理收藏。

2

我改變你的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; 
}