我對存儲過程很陌生。如何使存儲過程使用參數傳遞「數據集」?
說我有一個IDCategory(int),並將其傳遞給存儲過程。在正常的通話,它會去:
找我有 IDCategory等於IDCategory我 告訴你找到所有房源。
所以會覺得說,3日上市,並創建一個表列:
IDListing,IDCategory,價格,賣家,圖片。
我怎麼能做到這一點?
我對存儲過程很陌生。如何使存儲過程使用參數傳遞「數據集」?
說我有一個IDCategory(int),並將其傳遞給存儲過程。在正常的通話,它會去:
找我有 IDCategory等於IDCategory我 告訴你找到所有房源。
所以會覺得說,3日上市,並創建一個表列:
IDListing,IDCategory,價格,賣家,圖片。
我怎麼能做到這一點?
要從你會像下面的代碼存儲過程填充數據集:
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
在您的數據庫中有一個包含您希望查詢的5個字段的表格。
實施例:
Select IDListing, IDCategory, Price, Seller, Image
From [listingtable] --whatever your table is called
where IDCategoryID = @IDCategoryID
在使用它之前聲明一個變量有什麼好處? Brisbe42的答案是否更好,因爲它首先聲明變量? – 2009-08-28 02:33:28
如果沒有存儲過程定義的上下文,則此答案更接近實際在存儲過程中使用的答案。 – 2009-08-28 02:37:08
整個存儲過程:
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。
爲什麼這個問題標記爲mysql和tsql,因爲答案只涉及mssql?大聲笑。 – WoIIe 2015-08-06 10:07:21