Как сделать так, чтобы хранимая процедура возвращала «набор данных», используя параметр, который я передаю? - PullRequest
6 голосов
/ 28 августа 2009

Я очень плохо знаком с Хранимыми Процедурами.

Скажем, у меня есть IDCategory (int), и я передаю это хранимой процедуре. В обычном разговоре, это будет идти:

Найдите мне все объявления с IDCategory равна IDCategory я говорю вам, чтобы найти.

Таким образом, он найдет, скажем, 3 листинга и создаст таблицу со столбцами:

IDListing, IDCategory, цена, продавец, изображение.

Как мне этого добиться?

Ответы [ 3 ]

5 голосов
/ 28 августа 2009

Чтобы заполнить набор данных из хранимой процедуры, вы должны иметь следующий код:

SqlConnection mySqlConnection =new SqlConnection("server=(local);database=MyDatabase;Integrated Security=SSPI;");

    SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
    mySqlCommand.CommandText = "IDCategory";
    mySqlCommand.CommandType = CommandType.StoredProcedure;
    mySqlCommand.Parameters.Add("@IDCategory", SqlDbType.Int).Value = 5;

    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
    mySqlDataAdapter.SelectCommand = mySqlCommand;
    DataSet myDataSet = new DataSet();
    mySqlConnection.Open();
    mySqlDataAdapter.Fill(myDataSet);

Ваша строка подключения будет отличаться, и есть несколько разных способов сделать это, но это должно помочь вам ... Как только вы получите несколько из них за поясом, взгляните на инструкцию по использованию. Это помогает очистить ресурсы и требует немного меньше строк кода. Предполагается, что имя хранимой процедуры IDCategory с одним параметром называется одинаковым. Это может быть немного по-другому в вашей настройке.

Ваша хранимая процедура в этом случае будет выглядеть примерно так:

CREATE PROC [dbo].[IDCategory] 
    @IDCategory int
AS 
    SELECT IDListing, IDCategory, Price, Seller, Image
         FROM whateveryourtableisnamed
         WHERE IDCategory = @IDCategory

Вот ссылка на основы хранимых процедур: http://www.sql -server-performance.com / статьи / дБА / stored_procedures_basics_p1.aspx

Вот ссылка на DataSets и другие элементы в ADO.Net: http://authors.aspalliance.com/quickstart/howto/doc/adoplus/adoplusoverview.aspx

2 голосов
/ 28 августа 2009

Вся хранимая процедура:

CREATE PROCEDURE sp_Listing_Get
  @IDCategory int
AS

  DECLARE @categoryid
      SET @categoryid = @IDCategory

BEGIN

   SELECT t.idlisting,
          t.idcategory,
          t.price,
          t.seller,
          t.image
     FROM [databaseName].dbo.LISTING t
    WHERE t.idcategoryid = @categoryid

END

Замените [databaseName] именем вашей базы данных. Преимущество использования двухпериодного формата состоит в том, что sproc будет возвращать результаты, пока пользователь, выполняющий sproc, имеет доступ к таблице (и базе данных).

@categoryid используется для работы с параметром SQL Server проблема с прослушиванием .

2 голосов
/ 28 августа 2009

В вашей базе данных есть таблица, которая содержит те 5 полей, которые вы хотите, и запросите ее.

Пример:

Select IDListing, IDCategory, Price, Seller, Image
From [listingtable] --whatever your table is called
where IDCategoryID = @IDCategoryID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...