فراخوانی Stored Procedure بدون استفاده از پارامترها

سه شنبه 22 دی 1394

در این مقاله می خواهیم stored procedure را بدون پارامتر با استفاده از چهارچوب های خود stored procedure صدا بزنیم.Stored Procedure یا Sp یا به زبان فارسی " رویه های ذخیره شده " اشیایی اجرا پذیر در بانک اطلاعاتی SQL Server هستند که شامل یک یا چندین دستور SQL می شود ، این رویه ها میتوانند پارامتر های ورودی و خروجی داشته باشند .

فراخوانی Stored Procedure بدون استفاده از پارامترها

در این مقاله نحوه ی استفاده از strongle type در چهار چوب stored procedure است،هم چنین روش های صدا زدن storde procedure ها داریم.، صدا زدن stored procedure که پارامتر ندارد ولی باید نتایجی را بر گرداند.صدا زدن stored procedure  بدون پارامتر.

در stored procedure زیر یک نتیجه را برمی گرداند ولی پارامتری ندارد.

بنابراین در مثال زیر از یک stored procedure  استفاده می کنیم، که همه ی اطلاعات جدول را بر می گرداند.

CREATE PROCEDURE [app].[TenantGetAll]
AS
BEGIN
     -- Insert statements for procedure here
     SELECT      [TenantId]
     ,           [IsActive]
     ,           [TenantName]
     ,           [RecordCreatedDateTime]
     FROM        [app].[Tenant];
END

حالا برای ایجاد جدول:

CREATE TABLE [app].[Tenant] (
     [TenantId]              INT            IDENTITY (1, 1) NOT NULL,
     [IsActive]              BIT            NOT NULL,
     [TenantName]            NVARCHAR (100) NULL,
     [RecordCreatedDateTime] DATETIME       NOT NULL DEFAULT (GETDATE()),
     CONSTRAINT [PK_app.Tenant] PRIMARY KEY CLUSTERED ([TenantId] ASC)
 );

حالا برای افزودن اطلاعات به جدول:

INSERT INTO [app].[Tenant] ( [IsActive], [TenantName] ) VALUES ( 1, 'Acme Tenant' )
INSERT INTO [app].[Tenant] ( [IsActive], [TenantName] ) VALUES ( 1, 'Universal Tenant') 

Stored procedure یک داده بر می گرداند برای نمایش  اطلاعات این رکورد نیاز به تعریف یک کلاس داریم، برای تعریف هر رشته ما نیاز به property داریم که در کلاس زیر نوشته ایم، هر prpperty باید با نام و نوع هر رکورد از اطلاعات جدول مطابقت کند.

در روش stored procedure نوع متغییر و خود متغییر را می توانیم تعریف نماییم، در کلاس زیر ما هم نوع و اسم متغیر را بر می گردانیم.

internal class TenantDto
{
     public int TenantId { get; set; }
     public bool IsActive { get; set; }
     public string TenantName { get; set; }
     public DateTime RecordCreatedDateTime { get; set; }
}

ما در کلاس بالا شی های یکسان را انتقال می دهیم، و اطلاعات را از طریق لایه به client بر می گردانیم.

دراین مثال ما این کلاس شبیه به لایه ی DAL تعریف شده است، ولی اگر یک پروژه ی واقعی باشد شاید در لایه ی خدمات یا هر لایه ی دیگر تعریف میشد، در حال حاضر ما یک کلاس داریم که یک نوع از اطلاعات را بر می گرداند، که این کلاس را به نمایندگی از stored procedure می سازیم.

[Schema("app")]
internal class TenantGetAll
    : NoParametersStoredProcedureBase<List<TenantDto>>
{
}

اولین چیزی که توجه شما را جلب خواهد کرد کلمه ی schema است که در بالا قرار گرفته است، که بیان گر این است که آن یک dbo schema نیست، به طور پیش فرض تمام stored procedure ها یک dbo schema هستند، با استفاده از ویژگی های schema به طور پیش فرض می توان هر stored procedure را در هر schema ای قابل دسترس باشند.

نکته ی بعد در کد بالا ارث بری از کلاس NoParametersStoredProcedureBase<Return> است، این کلاس جهت صرفه جویی از تعریف پارامتر بیشتر است، این stored procedure ها به پارامتر نیاز ندارند و ما می توانیم از NoParametersStoredProcedureBase استفاده نماییم، نیاز به ساختن سازنده بدون پارامتر به عنوان کلاس پایه نداریم ، از پارامتر نوع return هم نیاز است.

ما می توانیم stored procedure را به صورت زیر صدا بزنیم:

[TestMethod]
public void TenantGetAll()
{
    // ARRANGE
    var procedure = new TenantGetAll();
    const int expectedTenantCount = 2;

    // ACT
    List<TenantDto> tenants = Connection.ExecuteStoredProcedure(procedure);
    TenantDto tenant1 = tenants.FirstOrDefault();

    // ASSERT
    Assert.AreEqual(expectedTenantCount, tenants.Count);
    Assert.IsNotNull(tenant1);
}

در ابتدا ما یک نمونه از شی stored procedure ایجاد کردیم، و سپس ما ارسال کردیم یک extension method را از شی sqlconnection به ExecuteStoredProcedure

با صدا زدن متد ExecuteStoredProcedure نتیجه ی ما به صورت یک لیست که این لیست از نوع strongle type است نمایش خواهد داد.

آموزش نصب sql server 2017

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید