در مطلب های پیشین، متد ()ExecuteNonQuery از کلاس SqlCommand را برای اجرای یک کوئری آماده شده به کار گرفتیم. به یاد داشته باشید، متد ()ExecuteNonQuery را برای کوئری های CREATE, INSERT, UPDATE, DELETE و SET به کارمی بریم. در صورت اجرای موفق متد ()ExecuteNonQuery، تعداد سطرهای تحت تاثیر کوئری ها برگشت داده می شود. قطعه زیر نمونه دیگری از آماده سازی کوئری با پارامترها و بوسیله متد ()AddWihtValue و به کار گیری متد ()ExecuteNonQuery و مقدار برگشتی آنرا نشان می دهد.

برای اجرای کوئری SELECT باید متد ()ExecuteReader را به جای متد ()ExecuteNonQuery به کار ببریم. متد ()ExecuteReader یک شی از نوع کلاس SqlDataReader را برگشت می دهد که می تواند شامل یک تا چندین سطر باشد. همچنین برای اجرای روال های ذخیره شده (Stored Procedure) نیز باید متد ()ExecuteRead کمک گرفته شود. بنابراین برای درج، بروز رسانی و پاک کردن داده از متد ()ExecuteNonQuery و برای واکشی داده ها و اجرای روال های ذخیره شده از متد ()ExecuteReader کمک می گیریم.

در کدهای بالا درون متد ()ShowAllNames رشته کوئری SELECT درون متغیر selectQuery تعریف شده است. سپس در خط ۲۳ متد ()ExecuteReader اجرا می شود. چون نوع برگشتی متد از نوع کلاس SqlDataReader است، پس متغیر reader را از نوع کلاس SqlDataReader تعریف کرده ایم. همچنین پس از اجرای موفق متد ()ExecuteReader و اجرای کوئری درون پایگاه داده، رکوردهای برگشتی می توانند شامل یک تا چندین سطر باشند. همچنین ممکن است هیچ سطری برابر با کوئری برگشت داده نشود. بنابراین متغیر reader شامل تمامی سطرهایی است که نتیجه کوئری از پایگاه داده هستند.

در خط های ۲۵ تا ۳۰ و درون بدنه حلقه while و تا زمانی که سطری برای نمایش وجود داشته باشد، مقدار ستون name جدول (مطلب های پیشین) نشان داده می شود. اگر به یاد داشته باشید جدول ساده مطلب های پیشین دارای دو ستون به نام های id و name بود. متغیر reader مطابق با کوئری SELECT* FROM testtbl در خط ۱۳ شامل همه سطرها است و ستون id با اندیس صفر (ستون نخست جدول) و ستون name با اندیس ۱ (ستون دوم جدول) قابل دسترسی هستند. شرط حلقه while از متد ()Read از کلاس SqlDataReader به ()reader.Read کمک گرفته شده است. متد ()Read سطر به سطر محتوای متغیر reader را می خواند.

کلاس SqlDataReader دارای خصوصیت (Property) به نام HasRows است که اگر اجرای متد ()ExecuteReader دارای یک تا چندین سطر باشد، خصوصیت HasRows برابر با true و در غیر این صورت برابر با false خواهد بود. همچنین می توانید از خصوصیت FieldCount برای پیدا کردن تعداد ستون های برگشتی استفاده کنید. در این مطلب چون کوئری به صورت SELECT * FROM testtbl بود، پس تمامی ستون ها (در اینجا id و name) برگشت داده می شوند ولی ممکن است شما بخواهید در کوئری ستون های ویژه ای را تعیین کنید. شکل زیر نیز محتوای متد ()Main را نشان می دهد که رشته اتصال تعریف و سپس بوسیله آن نمونه کلاس SqlConnection ایجاد و در نهایت متغیر connection به متد ()ShowAllNames فرستاده شده است.

دانلود سورس برنامه های این مطلب ADONET Select