2009-08-28 15 views
5

Soy muy nuevo en los procedimientos almacenados.¿Cómo puedo hacer que un procedimiento almacenado devuelva un "conjunto de datos" usando un parámetro que paso?

Digamos que tengo una IDCategory (int) y paso eso a un procedimiento almacenado. Dentro de la charla normal, se iría:

Encuéntrame todos los anuncios con un IDCategory igual al IDCategory Estoy indica que hay que encontrar.

por lo que sería encontrar decir 3 perfil, y crear una tabla con columnas:

IDListing, IDCategory, Precio, vendedor, Imagen.

¿Cómo puedo lograr esto?

+0

¿Por qué esta pregunta está etiquetada con mysql y tsql, ya que la respuesta se refiere solo a mssql? Lol. – WoIIe

Respuesta

3

para llenar un conjunto de datos de un procedimiento almacenado que tendría un código como a continuación:

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); 

Su cadena de conexión será diferente y hay algunas maneras diferentes de hacer esto, pero esto se debe conseguir que ir .. .. Una vez que obtenga algunos de estos bajo su cinturón eche un vistazo a la Declaración de Uso. Ayuda a limpiar los recursos y requiere unas pocas líneas de código. Esto supone un nombre de procedimiento almacenado IDCategory con un parámetro llamado igual. Puede ser un poco diferente en tu configuración.

Su procedimiento almacenado en este caso se verá algo como:

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

Aquí hay un enlace sobre conceptos básicos de procedimiento almacenado: http://www.sql-server-performance.com/articles/dba/stored_procedures_basics_p1.aspx

Aquí hay un enlace en conjuntos de datos y otros elementos, con ADO.Net: http://authors.aspalliance.com/quickstart/howto/doc/adoplus/adoplusoverview.aspx

2

Tenga una tabla en su base de datos que contenga esos 5 campos que desea y consúltelos.

Ejemplo:

Select IDListing, IDCategory, Price, Seller, Image 
From [listingtable] --whatever your table is called 
where IDCategoryID = @IDCategoryID 
+0

¿Cuál es el beneficio de declarar una variable antes de usarla? ¿La respuesta de Brisbe42 es mejor porque declaró la variable primero? –

+0

Sin el contexto de la definición de procedimiento almacenado, esta respuesta es más cercana a lo que realmente se usaría en un procedimiento almacenado. –

2

Todo el procedimiento almacenado:

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 

sustituya [de databaseName] con el nombre de su base de datos. El beneficio de usar el formato de dos períodos es que el sproc arrojará resultados siempre que el usuario que está ejecutando el sproc tenga acceso a la tabla (y base de datos).

El @categoryid se utiliza para tratar con el parámetro Servidores SQL sniffing issue.

Cuestiones relacionadas