Получить несколько значений из базы данных ASP.NET/C# - PullRequest
2 голосов
/ 12 ноября 2011

Я пытаюсь получить / вернуть несколько значений из базы данных 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

Ответы [ 4 ]

3 голосов
/ 12 ноября 2011

Вы должны использовать вместо этого sql datareader.

 DataReader data_reader= MySqlCommand.ExecuteReader( ); 
   while(data_reader.Read())  
  {
       ...
  }         
2 голосов
/ 12 ноября 2011

Я изменяю ваш метод 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;
 }
0 голосов
/ 12 ноября 2011

Вы можете использовать SQLDataReader или SQLDataAdapter , чтобы заполнить DataSet, хотя для веб-форм вам может быть лучше обслуживать разделение доступа к данным со своей страницы полностью способ использования ObjectDataSource .

0 голосов
/ 12 ноября 2011

Ваша хранимая процедура возвращает одну строку для идентификатора или она возвращает несколько строк? В конечном итоге вам нужно будет пересмотреть результаты. Если хранимая процедура возвращает одну запись на вызов, то вам нужно перебрать идентификаторы на странице aspx. Если хранимая процедура возвращает несколько строк, вы можете использовать и sqlDataReader вместо вызова ExecuteScalar. Переберите строки, которые были возвращены, и добавьте их в какую-то коллекцию или список. Затем верните его на свою страницу. Однако вам все равно придется изменить страницу aspx для обработки коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...