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

اضافه کردن پارامتر به Command در ADO.net

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

  1. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    این درس چگونگی استفاده از پارامترها را در دستورات نشان می دهد. در اینجا اهداف مربوط به این بخش را مشاهده می کنید:


    • درک اینکه یک پارامتر چیست.
    • مطلع شدن از مزایای استفاده از پارامترها.
    • یادگیری چگونگی ایجاد یک پارامتر.
    • یادگیری چگونگی اختصاص دادن پارامترها به دستورات.
     
    *Sajjad*، m naizar و Bahar از این ارسال تشکر کرده اند.
  2. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    مقدمه:
    در هنگام کار با داده، اغلب تمایل خواهید داشت که نتایج را براساس برخی ضوابط فیلتر کنید. معمولا این کار با قبول ورودی از یک یوزر و استفاده از آن ورودی برای طراحی یک SQL query استفاده می شود. برای مثال یک فروشنده ممکن است تمام سفارشات بین دو تاریخ مشخص را مشاهده کند. یک query دیگر ممکن است مشتریان را براساس شهر فیلتر کند.


    همانطور که می دانید SQL query اختصاص داده شده به یک آبجکت SqlCommand یک رشته می باشد.بنابراین اگر می خواهید یک query را فیلتر کنید، می توانید رشته را به صورت پویا بسازید، اما تمایل به این کار ندارید. در اینجا مثال بدی از فیلتر کردن یک query مشاهده می کنید.

    کد:
    // don't ever do this‎
          SqlCommand cmd = new SqlCommand(‎
                   ‎"select * from Customers where city = '" + inputCity + "'";‎

    هرگز به این طریق یک query نسازید. متغیر ورودی، inputCity، معمولا از یک کنترل TextBox، یا روی یک فرم Windows یا یک Web Page، بازیابی می شود. هر چیزی که در کنترل TextBox جای می گیرد، در inputCity قرار داده خواهد شد و به رشته ی SQL شما افزوده می شود. این موقعیت یک هکر را دعوت به جایگزین کردن یک برنامه ی مخرب به جای رشته می کند. در بدترین حالت ممکن است کنترل کامل کامپیوتر خود را از دست بدهید.


    به جای ساخت یک رشته به طور پویا، که در مثال بد در بلا نشان داده شد، از پارامترها استفاده کنید. با هر چیز واقع شده در یک پارامتر به عنوان یک داده در فیلد رفتار خواهد شد و نه بخشی از عبارت SQL که برنامه ی شما را امن تر می سازد.


    استفاده از query های پارامتری شده در یک فرایند سه مرحله ای:


    1. رشته ی فرمان SqlCommand را بسازید.
    2. یک آبجکت SqlParameter را اعلام کنید و مقادیر را به عنوان مقادیر مناسب اختصاص دهید.
    3. آبجکت SqlParameter را به پراپرتی Parameters مربوط به آبجکت SqlCommand اختصاص دهید.

    بخش های بعدی شما را مرحله به مرحله در این فرایند پیش می برند.
     
    *Sajjad*، m naizar و Bahar از این ارسال تشکر کرده اند.
  3. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    آماده سازی یک آبجکت SqlCommand برای پارامترها:
    اولین مرحله در استفاده از query های SQL ساخت یک رشته فرمان حاوی مکان های پارامتر( parameter placeholders) می باشد. این مکان ها در هنگام اجرای SqlCommand با مقادیر پارامتر واقعی پر می شوند. ترکیب مناسب یک پارامتر استفاده از نماد @ روی نام پارامتر می باشد، همانطور که در زیر نمایش داده شده است:

    کد:
    ‎// 1. declare command object with parameter‎
              SqlCommand cmd = new SqlCommand(‎
                       ‎"select * from Customers where city = @City", conn);
    در سازنده ی SqlCommand در بالا، اولین استدلال حاوی یک اعلام پارامتر می شود، @city. این مثال از یک پارامتر استفاده کرد، اما شما می توانید برای شخصی سازی query هر تعداد پارامتر لازم است داشته باشید. هر پارامتر با یک آبجکت SqlParameter هماهنگ خواهد بود که باید به این آبجکت SqlCommand اختصاص داده شود.
     
    *Sajjad*، m naizar و Bahar از این ارسال تشکر کرده اند.
  4. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    اعلام یک آبجکت SqlParameter:
    هر پارامتر در یک عبارت SQL باید تعریف شده باشد. این هدف نوع SqlParameter می باشد. کد شما باید یک نمونه SqlParameter را برای هر پارامتر در یک آبجکت SqlCommand از فرمان SQL تعریف کند. کد زیر یک پارامتر برای پارامتر@City از بخش قبل تعریف می کند:

    کد:
    ‎// 2. define parameters used in command object
              SqlParameter param  = new SqlParameter();‎
              param.ParameterName = "@City";‎
              param.Value         = inputCity;
    دقت داشته باشید که پراپرتی ParameterName از نمونه ی SqlParameter به عنوان پارامتری که در رشته ی فرمان SqlCommand SQL استفاده می شود، باید املای دقیق داشته باشد. شما نیز باید یک مقدار برای فرمان تعیین کنید. وقتی که آبجکت SqlCommand اجرا می شود، پارامتر با این مقدار جایگزین خواهد شد.
     
    *Sajjad*، m naizar و Bahar از این ارسال تشکر کرده اند.
  5. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    ارتباط یک آبجکت SqlParameter با یک آبجکت SqlCommand:
    برای هر پارامتر تعریف شده در بحث رشته ی دستور SQL ( SQL command string) به یک آبجکت SqlCommand، باید یک SqlParameter تعریف کنید. همچنین باید به آبجکت SqlCommand اجزه بدهید تا با انتقال نمونه ی SqlParameter به پراپرتی Parameters از آبجکت SqlCommand در مورد SqlParameter اطلاعات داشته باشد. کد زیر چگونگی انجام انجام این کار را نشان می دهد:
    کد:
    // 3. add new parameter to command object‎
              cmd.Parameters
    نمونه ی SqlParameter استدلالی می باشد برای متد Add از پراپرتی Parameters برای آبجکت SqlCommand در بالا. شما باید یک SqlParameter مجزا برای هر پارامتر تعریف شده در آبجکت SqlCommand مربوط به رشته ی دستور SQL اضافه کنید.
     
    m naizar و Bahar از این پست تشکر کرده اند.
  6. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    کنار هم قرار دادن همه ی موارد:
    شما تقریبا چگونگی استفاده از آبجکت های SqlCommand و SqlDataReader را می دانید. کد زیر یک برنامه ی در حال اجرا را نشان می دهد که از آبجکت های SqlParameter استفاده می کند. بنابراین تاکنون هر چیزی باید آشنا باشد، به جز بخش های جدیدی که در این مقاله مطرح شدند:

    کد:
    using System;‎
    using System.Data;‎
    using System.Data.SqlClient;‎
     
    class ParamDemo
    ‎{‎
              static void Main()‎
              ‎{‎
                       ‎// conn and reader declared outside try‎
                       ‎// block for visibility in finally block‎
                       SqlConnection conn   = null;‎
                       SqlDataReader reader = null;‎
     
                       string inputCity = "London";
     
                       try
                       ‎{‎
                                 ‎// instantiate and open connection‎
                                 conn =  new ‎
                                          SqlConnection("Server=(local);DataBase=Northwind;Integrated ‎Security=SSPI");‎
                                 conn.Open();‎
     
                                 ‎// don't ever do this‎
    ‎            // SqlCommand cmd = new SqlCommand(‎
    ‎            // "select * from Customers where city = '" + inputCity + "'";‎
     
                                 ‎// 1. declare command object with parameter‎
                                 SqlCommand cmd = new SqlCommand(‎
                                          ‎"select * from Customers where city = @City", ‎conn);‎
     
                                 ‎// 2. define parameters used in command object‎
                                 SqlParameter param  = new SqlParameter();‎
                                 param.ParameterName = "@City";‎
                                 param.Value         = inputCity;‎
     
                                 ‎// 3. add new parameter to command object‎
                                 cmd.Parameters.Add(param);‎
     
                                 ‎// get data stream‎
                                 reader = cmd.ExecuteReader();‎
     
                                 ‎// write each record‎
                                 while(reader.Read())‎
                                 ‎{‎
                                          Console.WriteLine("{0}, {1}", ‎
                                                    reader["CompanyName"], ‎
                                                    reader["ContactName"]);‎
                                 ‎}‎
                       ‎}‎
                       finally
                       ‎{‎
                                 ‎// close reader‎
                                 if (reader != null)‎
                                 ‎{‎
                                          reader.Close();‎
                                 ‎}‎
     
                                 ‎// close connection‎
                                 if (conn != null)‎
                                 ‎{‎
                                          conn.Close();‎
                                 ‎}‎
                       ‎}‎
              ‎}‎
    ‎}‎
     
    m naizar از این پست تشکر کرده است.
  7. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    کد مربوط به Listing 1 رکوردهای مربوط به هر مشتری را در لندن زندگی می کند، بازیابی می کند. این از طریق استفاده از پارامترها ایمن تر می شود. علاوه بر استفاده از پارامترها، همه ی کدهای دیگر حاوی تکنیک هایی هستند که در بخش های قبل یاد گرفته اید.
     
    m naizar از این پست تشکر کرده است.
  8. مدير ارشدツ عضو کادر مدیریت مدیر ارشد

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    3,897
    تشکر شده:
    27,307
    امتیاز دستاورد:
    113
    حرفه:
    عابیاری عه گیاهان دریایی
    خلاصه:
    شما باید از پارامترها برای فیلتر کردن query ها به یک روش ایمن استفاده کنید. فرایند استفاده از پارامتر حاوی سه مرحله می باشد:


    تعریف پارامتر در SqlCommand command string ، اعلام آبجکت SqlParameter با پراپرتی های برنامه و اختصاص دادن آبجکت SqlParameter به آبجکت SqlCommand. وقتی که SqlCommand اجرا می شود، پارامترها با مقادیر تعیین شده توسط آبجکت SqlParameter جایگزین می شوند.
     
    *Sajjad* و m naizar از این پست تشکر کرده اند.