2009-08-28 3 views
5

Ich bin sehr neu in Stored Procedures.Wie kann ich veranlassen, dass eine gespeicherte Prozedur einen "Datensatz" mit einem Parameter zurückgibt, den ich bestanden habe?

Angenommen, ich habe eine IDCategory (int) und ich übergebe das an eine gespeicherte Prozedur. Im Normal-talk, würde es gehen:

Finde mich alle Inserate mit einem IDCategory gleich der IDCategory Ich bin sagen Sie zu finden.

So wäre es 3 Eintrag sagen finden, und eine Tabelle mit Spalten erstellen:

IDListing, IDCategory, Preis, Verkäufer, Bildkomposition.

Wie konnte ich das erreichen?

+0

Warum ist diese Frage mit mysql und tsql markiert, da sich die Antwort nur auf mssql bezieht? Lol. – WoIIe

Antwort

3

Um einen Datensatz aus einer gespeicherten Prozedur füllen Sie Code wie unten haben würde:

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

Ihre Verbindungszeichenfolge ein paar verschiedene Möglichkeiten, dies zu tun, aber dies sollte man gehen wird anders sein, und es gibt bekommen .. .. Sobald Sie ein paar davon auf dem Buckel haben, werfen Sie einen Blick auf die Using Statement. Es hilft, die Ressourcen aufzuräumen und benötigt ein paar weniger Codezeilen. Dies setzt eine Stored Procedure IDCategory mit einem Parameter voraus, der gleich benannt wird. Es kann ein wenig anders in Ihrem Setup sein.

Ihre gespeicherte Prozedur in diesem Fall etwas wie folgt aussehen:

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

Hier ein Link ist auf Stored Procedure Grundlagen: http://www.sql-server-performance.com/articles/dba/stored_procedures_basics_p1.aspx

Hier ist ein Link auf Datasets und andere Gegenstände mit ADO.Net: http://authors.aspalliance.com/quickstart/howto/doc/adoplus/adoplusoverview.aspx

2

Haben Sie eine Tabelle in Ihrer Datenbank, die diese 5 Felder enthält, die Sie wünschen und abfragen.

Beispiel:

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

Welchen Vorteil hat die Deklaration einer Variablen vor ihrer Verwendung? Ist Brisbe42s Antwort besser, weil sie die Variable zuerst erklärt hat? –

+0

Ohne den Kontext der gespeicherten Prozedurdefinition ist diese Antwort näher an dem, was tatsächlich in einer gespeicherten Prozedur verwendet wird. –

2

Gesamte gespeicherte Prozedur:

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 

Ersetzen Sie [database] mit dem Namen Ihrer Datenbank. Der Vorteil der Verwendung des Zweiperiodenformats besteht darin, dass der Sproc Ergebnisse zurückgibt, solange der Benutzer, der den Sproc ausführt, Zugriff auf die Tabelle (und die Datenbank) hat.

Die @categoryid wird verwendet, um SQL Server-Parameter sniffing issue zu behandeln.

Verwandte Themen