2009-08-28 79 views
5

我對存儲過程很陌生。如何使存儲過程使用參數傳遞「數據集」?

說我有一個IDCategory(int),並將其傳遞給存儲過程。在正常的通話,它會去:

找我有 IDCategory等於IDCategory我 告訴你找到所有房源。

所以會覺得說,3日上市,並創建一個表列:

IDListing,IDCategory,價格,賣家,圖片。

我怎麼能做到這一點?

+0

爲什麼這個問題標記爲mysql和tsql,因爲答案只涉及mssql?大聲笑。 – WoIIe 2015-08-06 10:07:21

回答

3

要從你會像下面的代碼存儲過程填充數據集:

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/articles/dba/stored_procedures_basics_p1.aspx

下面是用ADO.Net的數據集和其他項目的鏈接: http://authors.aspalliance.com/quickstart/howto/doc/adoplus/adoplusoverview.aspx

2

在您的數據庫中有一個包含您希望查詢的5個字段的表格。

實施例:

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

在使用它之前聲明一個變量有什麼好處? Brisbe42的答案是否更好,因爲它首先聲明變量? – 2009-08-28 02:33:28

+0

如果沒有存儲過程定義的上下文,則此答案更接近實際在存儲過程中使用的答案。 – 2009-08-28 02:37:08

2

整個存儲過程:

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服務器參數sniffing issue

相關問題