1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

استفاده از Stored Procedure در ADO.NET

شروع موضوع توسط AftabGardoon ‏5/4/19 در انجمن ASP.NET

Tags:
  1. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    این درس چگونگی استفاده از برنامه های ذخیره شده را در کد دسترسی به داده (data access) نشان می دهد. در اینحا اهداف درس را مشاهده می کنید:


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

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


    علاوه بر این دلیل دیگری برای اهمیت محافظت پارامترها در کتابخانه های ADO.NET مشاهده خواهید کرد.
     
    Bahar و m naizar از این پست تشکر کرده اند.
  2. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    اجرای یک برنامه ی ذخیره شده (Stored Procedure)
    علاوه بر فرمان های ساخته شده با رشته ها، نوع SqlCommand می تواند برای اجرای برنامه های ذخیره شده استفاده شود. دو فعالیت لازم برای عملی کردن این امر عبارتند از: به آبجکت SqlCommand اجازه بدهید که بداند کدام برنامه ی ذخیره شده اجرا می شود و به آبجکت SqlCommand نیز اطلاع دهید که یک برنامه ی ذخیره شده اجرا می شود. این دو مرحله در زیر نمایش داده شده اند:
    کد:
    ‎// 1. create a command object identifying‎
              ‎// the stored procedure‎
              SqlCommand cmd  = new SqlCommand(‎
                       ‎"Ten Most Expensive Products", conn);‎
     
              ‎// 2. 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 همانطوری استفاده کند که در بخش های قبلی استفاده شد.
     
    Bahar و m naizar از این پست تشکر کرده اند.
  3. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ارسال پارامترها به برنامه های ذخیره شده:
    استفاده از پارامترها برای برنامه های ذخیره شده مشابه استفاده از پارامترها برای فرمان های رشته ی query می باشد. کد زیر این را نشان می دهد:

    کد:
    ‎// 1. create a command object identifying‎
              ‎// the stored procedure‎
              SqlCommand cmd  = new SqlCommand(‎
                       ‎"CustOrderHist", conn);‎
     
              ‎// 2. set the command object so it knows‎
              ‎// to execute a stored procedure‎
              cmd.CommandType = CommandType.StoredProcedure;‎
     
              ‎// 3. add parameter to command, which‎
              ‎// will be passed to the stored procedure‎
              cmd.Parameters.Add(‎
                       new SqlParameter("@CustomerID", custId));‎[/LEFT]
     
    }
    یک سازنده ی SqlCommand در بالا نام یک برنامه ی ذخیره شده را تعیین می کند. این برنامه ی ذخیره شده ی خاص یک پارامتر مجزا به نام @CustomerID می گیرد. بنابراین ما باید پارامتر را با استفاده از یک آبجکت SqlParameter پر کنیم. نام پارامتر منتقل شده به عنوان اولین پارامتر به سازنده ی SqlParameter باید از لحاظ املایی دقیق مانند پارامتر برنامه ی ذخیره شده باشد. سپس درست مانند هر آبجکت SqlCommand دیگر، دستور را اجرا کنید.​
     
    Bahar از این پست تشکر کرده است.
  4. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    یک مثال کامل:
    کد موجود در 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();‎
     
                                 ‎// 1. create a command object identifying‎
                                 ‎// the stored procedure‎
                                 SqlCommand cmd  = new SqlCommand(‎
                                          ‎"Ten Most Expensive Products", conn);‎
     
                                 ‎// 2. 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: ‎‎${1,6:####.00}",‎
                                                    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();‎
     
                                 ‎// 1. create a command object identifying‎
                                 ‎// the stored procedure‎
                                 SqlCommand cmd  = new SqlCommand(‎
                                          ‎"CustOrderHist", conn);‎
     
                                 ‎// 2. set the command object so it knows‎
                                 ‎// to execute a stored procedure‎
                                 cmd.CommandType = CommandType.StoredProcedure;‎
     
                                 ‎// 3. 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 و برنامه های ذخیره شده وجود ندارد. بقیه ی کد باید برای افرادی که بخش های قبل این آموزش را خوانده اند، آشنا باشد.
     
    Bahar از این پست تشکر کرده است.
  5. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    خلاصه:
    برای اجرای برنامه های ذخیره شده، نام برنامه ی ذخیره شده را در اولین پارامتر یک سازنده ی SqlCommand تعیین می کنید و سپس CommandType از SqlCommand را به StoredProcedure تنظیم می کنید. همچنین می توانید با استفاده از آبجکت های SqlParameter پارامترها را به یک برنامه ی ذخیره شده ارسال کنید، همان روشی که با آبجکت های SqlCommand در اجرای رشته های query انجام می شود. زمانی که آبجکت ساخته می شود، می توانید از آن درست مانند هر آبجکت SqlCommand دیگری، طوری که در بخش های قبل توضیح داده شد، استفاده کنید.
     
    Bahar از این پست تشکر کرده است.