2009-08-28 16 views
5

Tôi rất mới để lưu trữ thủ tục.Làm cách nào để tôi thực hiện thủ tục được lưu trữ trả về "tập dữ liệu" bằng thông số tôi vượt qua?

Giả sử tôi có IDCategory (int) và tôi chuyển cho một thủ tục được lưu trữ. Trong bình thường-talk, nó muốn đi:

Tìm cho tôi tất cả các danh sách với một IDCategory bằng với IDCategory Tôi nói cho bạn để tìm.

Vì vậy, nó sẽ tìm thấy nói 3 niêm yết, và tạo ra một bảng với các cột:

IDListing, IDCategory, Giá, Người bán, Hình ảnh.

Làm cách nào để đạt được điều này?

+0

Tại sao câu hỏi này được gắn thẻ với mysql và tsql, vì câu trả lời chỉ đề cập đến mssql? Lol. – WoIIe

Trả lời

3

Để điền vào một bộ dữ liệu từ một stored procedure bạn sẽ có mã như dưới đây:

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

chuỗi kết nối của bạn sẽ khác nhau và có một vài cách khác nhau để thực hiện điều này nhưng điều này sẽ giúp bạn đi .. .. Một khi bạn nhận được một vài trong số này dưới vành đai của bạn hãy xem Tuyên bố sử dụng. Nó giúp làm sạch các nguồn lực và yêu cầu một vài dòng mã ít hơn. Điều này giả định một tên thủ tục lưu trữ IDCategory với một tham số được gọi là giống nhau. Nó có thể hơi khác một chút trong thiết lập của bạn.

thủ tục lưu trữ của bạn trong trường hợp này sẽ giống như thế:

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

Dưới đây là một liên kết trên cơ bản Stored Procedure: http://www.sql-server-performance.com/articles/dba/stored_procedures_basics_p1.aspx

Dưới đây là một liên kết trên DataSet và các mặt hàng khác với ADO.Net: http://authors.aspalliance.com/quickstart/howto/doc/adoplus/adoplusoverview.aspx

2

Có bảng trong cơ sở dữ liệu chứa 5 trường bạn muốn và truy vấn nó.

Ví dụ:

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

Lợi ích của việc khai báo biến trước khi sử dụng nó là gì? Câu trả lời của Brisbe42 có tốt hơn không vì nó đã khai báo biến trước? –

+0

Nếu không có ngữ cảnh của định nghĩa thủ tục được lưu trữ, câu trả lời này là gần hơn với những gì người ta thực sự sẽ sử dụng trong một thủ tục được lưu trữ. –

2

Toàn bộ thủ tục lưu trữ:

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 

Replace [databasename] với tên của cơ sở dữ liệu của bạn. Lợi ích của việc sử dụng định dạng hai kỳ là sproc sẽ trả về kết quả miễn là người dùng đang thực hiện sproc có quyền truy cập vào bảng (và cơ sở dữ liệu).

@categoryid được sử dụng để xử lý thông số Máy chủ SQL sniffing issue.

Các vấn đề liên quan