سلام وقت بخیر ، امروز با آموزشی از Asp.net و استفاده از Stored Procedure در خدمت شما هستم . این درس چگونگی استفاده از برنامه های ذخیره شده را در کد دسترسی به داده (data access) نشان می دهد. در اینحا اهداف درس را مشاهده می کنید:

· یادگیری چگونگی تغییر آبجکت SqlCommand برای از یک برنامه ی ذخیره شده.

· درک چگونگی استفاده از پارامترها با برنامه های ذخیره شده.

مقدمه:

یک stored procedures یک روند از قبل تعریف شده و قابل استفاده ی مجدد می باشد که در یک دیتابیس ذخیره شده است. SQL Server این برنامه ها را کامپایل می کند که آنها را مفیدتر می سازد. بنابراین به جای ساختن پویای query ها در کد، می توانید از استفاده ی مجدد و اجرای مزایای برنامه ی ذخیره شده بهره ببرید. بخش های زیر چگونگی تغییر آبجکت SqlCommand را برای استفاده از برنامه های ذخیره شده نشان می دهد.

علاوه بر این دلیل دیگری برای اهمیت محافظت پارامترها در کتابخانه های ADO.NET مشاهده خواهید کرد.

اجرای یک برنامه ی ذخیره شده (Stored Procedure)

علاوه بر فرمان های ساخته شده با رشته ها، نوع SqlCommand می تواند برای اجرای برنامه های ذخیره شده استفاده شود. دو فعالیت لازم برای عملی کردن این امر عبارتند از: به آبجکت SqlCommand اجازه بدهید که بداند کدام برنامه ی ذخیره شده اجرا می شود و به آبجکت SqlCommand نیز اطلاع دهید که یک برنامه ی ذخیره شده اجرا می شود. این دو مرحله در زیر نمایش داده شده اند:

‎// ۱٫ create a command object identifying‎

‎// the stored procedure‎

SqlCommand cmd = new SqlCommand(‎

‎”Ten Most Expensive Products”, conn);‎

‎// ۲٫ set the command object so it knows‎

‎// to execute a stored procedure‎

cmd.CommandType = CommandType.StoredProcedure;‎

در هنگام اعلام آبجکت SqlCommand در بالا، اولین پارامتر به “Ten Most Expensive Products” (گرانترین محصولات) تنظیم می شود. این نام یک برنامه ی ذخیره شده در دیتابیس Northwind می باشد. دومین پارامتر آبجکت اتصال است که مانند سازنده ی SqlCommand برای اجرای رشته های query استفاده می شود.

فرمان دوم به آبجکت SqlCommand می گوید که با تنظیم پراپرتی CommandType آن به مقدار StoredProcedure از شمارش CommandType چه نوع فرمانی اجرا خواهد شد. تفسیر پیش فرض اولین پارامتر برای سازنده ی SqlCommand این است که با آن مانند یک رشته query رفتار می کند. با تنظیم CommandType به StoredProcedure، اولین پارامتر به سازنده ی SqlCommand با عنوان نام یک برنامه ی ذخیره شده در نظز گرفته خواهد شد (به جای توضیح آن به عنوان یک رشته فرمان). بقیه ی کد می تواند از آبجکت SqlCommand همانطوری استفاده کند که در بخش های قبلی استفاده شد.

ارسال پارامترها به برنامه های ذخیره شده:

استفاده از پارامترها برای برنامه های ذخیره شده مشابه استفاده از پارامترها برای فرمان های رشته ی query می باشد. کد زیر این را نشان می دهد:

‎// ۱٫ create a command object identifying‎

‎// the stored procedure‎

SqlCommand cmd = new SqlCommand(‎

‎”CustOrderHist”, conn);‎

‎// ۲٫ set the command object so it knows‎

‎// to execute a stored procedure‎

cmd.CommandType = CommandType.StoredProcedure;‎

‎// ۳٫ add parameter to command, which‎

‎// will be passed to the stored procedure‎

cmd.Parameters.Add(‎

new SqlParameter(“@CustomerID”, custId));‎

}

یک سازنده ی SqlCommand در بالا نام یک برنامه ی ذخیره شده را تعیین می کند. این برنامه ی ذخیره شده ی خاص یک پارامتر مجزا به نام @CustomerID می گیرد. بنابراین ما باید پارامتر را با استفاده از یک آبجکت SqlParameter پر کنیم. نام پارامتر منتقل شده به عنوان اولین پارامتر به سازنده ی SqlParameter باید از لحاظ املایی دقیق مانند پارامتر برنامه ی ذخیره شده باشد. سپس درست مانند هر آبجکت SqlCommand دیگر، دستور را اجرا کنید.

یک مثال کامل:

کد موجود در Listing 1 حاوی یک مثال کامل در حال اجرا از چگونگی استفاده از برنامه های ذخیره شده می باشد. روش های مجزایی برای یک برنامه ی ذخیره شده ی بدون پارامتر و یک برنامه ی ذخیره شده ی با پارامتر وجود دارد.

using System;‎

using System.Data;‎

using System.Data.SqlClient;‎

class StoredProcDemo

‎{‎

static void Main()‎

‎{‎

StoredProcDemo spd = new StoredProcDemo();‎

‎// run a simple stored procedure‎

spd.RunStoredProc();‎

‎// run a stored procedure that takes a parameter

spd.RunStoredProcParams();‎

‎}‎

‎// run a simple stored procedure‎

public void RunStoredProc()‎

‎{‎

SqlConnection conn = null;‎

SqlDataReader rdr = null;‎

Console.WriteLine(“\nTop 10 Most Expensive Products:\n”);‎

try

‎{‎

‎// create and open a connection object‎

conn = new ‎

SqlConnection(“Server=(local);DataBase=Northwind;Integrated ‎Security=SSPI”);‎

conn.Open();‎

‎// ۱٫ create a command object identifying‎

‎// the stored procedure‎

SqlCommand cmd = new SqlCommand(‎

‎”Ten Most Expensive Products”, conn);‎

‎// ۲٫ set the command object so it knows‎

‎// to execute a stored procedure‎

cmd.CommandType = CommandType.StoredProcedure;‎

‎// execute the command‎

rdr = cmd.ExecuteReader();‎

‎// iterate through results, printing each to console‎

while (rdr.Read())‎

‎{‎

Console.WriteLine(‎

‎”Product: {0,-25} Price: ‎‎${۱,۶:####.۰۰}”,‎

rdr[“TenMostExpensiveProducts”],‎

rdr[“UnitPrice”]);‎

‎}‎

‎}‎

finally

‎{‎

if (conn != null)‎

‎{‎

conn.Close();‎

‎}‎

if (rdr != null)‎

‎{‎

rdr.Close();‎

‎}‎

‎}‎

‎}‎

‎// run a stored procedure that takes a parameter‎

public void RunStoredProcParams()‎

‎{‎

SqlConnection conn = null;‎

SqlDataReader rdr = null;‎

‎// typically obtained from user

‎// input, but we take a short cut‎

string custId = “FURIB”;‎

Console.WriteLine(“\nCustomer Order History:\n”);‎

try

‎{‎

‎// create and open a connection object‎

conn = new ‎

SqlConnection(“Server=(local);DataBase=Northwind;Integrated ‎Security=SSPI”);‎

conn.Open();‎

‎// ۱٫ create a command object identifying‎

‎// the stored procedure‎

SqlCommand cmd = new SqlCommand(‎

‎”CustOrderHist”, conn);‎

‎// ۲٫ set the command object so it knows‎

‎// to execute a stored procedure‎

cmd.CommandType = CommandType.StoredProcedure;‎

‎// ۳٫ add parameter to command, which‎

‎// will be passed to the stored procedure‎

cmd.Parameters.Add(‎

new SqlParameter(“@CustomerID”, custId));‎

‎// execute the command‎

rdr = cmd.ExecuteReader();‎

‎// iterate through results, printing each to console‎

while (rdr.Read())‎

‎{‎

Console.WriteLine(‎

‎”Product: {0,-35} Total: {1,2}”,‎

rdr[“ProductName”],‎

rdr[“Total”]);‎

‎}‎

‎}‎

finally

‎{‎

if (conn != null)‎

‎{‎

conn.Close();‎

‎}‎

if (rdr != null)‎

‎{‎

rdr.Close();‎

‎}‎

‎}‎

‎}‎

‎}‎

متود RunStoredProc در Listing 1 به سادگی یک برنامه ی ذخیره شده را اجرا کرده و نتایج را در console چاپ می کند. در متود RunStoredProcParams برنامه ی ذخیره شده ی مورد استفاده یک پارامتر مجزا می گیرد. این امر بیان می کند که هیچ تفاوتی بین استفاده از پارامترها با رشته های query و برنامه های ذخیره شده وجود ندارد. بقیه ی کد باید برای افرادی که بخش های قبل این آموزش را خوانده اند، آشنا باشد.

خلاصه:

برای اجرای برنامه های ذخیره شده، نام برنامه ی ذخیره شده را در اولین پارامتر یک سازنده ی SqlCommand تعیین می کنید و سپس CommandType از SqlCommand را به StoredProcedure تنظیم می کنید. همچنین می توانید با استفاده از آبجکت های SqlParameter پارامترها را به یک برنامه ی ذخیره شده ارسال کنید، همان روشی که با آبجکت های SqlCommand در اجرای رشته های query انجام می شود. زمانی که آبجکت ساخته می شود، می توانید از آن درست مانند هر آبجکت SqlCommand دیگری، طوری که در بخش های قبل توضیح داده شد، استفاده کنید.