کلاس command

هر data provider، کلاس command مربوط به خودش را دارد، که برای اجرای دستورات SQL یا رویه‌های ذخیره شده (stored procedure) بر روی دیتابیس، به کار می‌رود. هر کلاس command، از یک کلاس Systam.Data.Common.DbCommand ارث بری می‌کند. جدول زیر کلاسهای command مختلف را برای data provider های مختلف را نشان می‌دهد.

کلاس Command Data Provider
SqlCommand Sql Server
OleDbCommand OLE DB
OdbcCommand ODBC

کلاس DbCommand رابط IDbCommand را پیاده سازی می‌کند یعنی از متدها و خاصیت‌های آن استفاده می‌کند، که در جدول زیر متدها و خاصیت‌هایی را که استفاده می‌کند را می‌بینید:

خاصیت توضیحات
CommandText دستور Sql یا رویه ذخیره شده در دیتابیس (stored procedure) یا اسم جدول را مشخص می‌کند
CommandTimeout زمان مورد نیازی را به ما نشان می‌دهد که برای اجرای یک دستور لازم است. اگر اجرای یک دستور از این بیشتر طول بکشد یک استثناء رخ خواهد داد. این زمان به صورت پیشفرض 30 ثانیه است.
CommandType نوع دستوری را که در commandText مشخص شده است به ما نشان می‌دهد که مقدار خود را از System.Data.CommandType می‌گیرد. که سه مقدار می‌تواند بگیرد.
Text که از آن برای دادن دستور Sql،
stroedPeocedure برای رویه‌های ذخیره شده،
TableDirect که از آن برای گرفتن تمام سطر و ستون‌ها از چند جدول استفاده می‌شود. به صورت پیشفرض text مورد استفاده قرار می‌گیرد.
Connection کانکشنی را مشخص می‌کند که command با آن کار می‌کند. کلاس command باید با به یک کانکشن باز وصل شود که در واقع این دستور بر روی آن کانکشن اجرا می‌شود.
Parameters مجموعه‌ای از پارامترها که در CommandText تعریف شده است
متدها توضیحات
Cancel() دستوری که در حال اجراست را لغو می‌کند
CreateParameter() یک شئ جدید از پارامتر می‌سازد که می‌تواند به مجموعه command.parameter اضافه شود
ExecuteReader() دستور را اجرا می‌کند و یک سری اطلاعات به فرم DateReader برمی گرداند که فقط هم قابل خواندن است. مثلاً تنها برای دیدن حاصل یک query
ExecuteNonQuery() یک دستور اجرا می‌کند و ردیف‌هایی که تحت تأثیر این دستور تغییر کردند را بر می‌گرداند. مثلاً برای اجرای update ،delete ،Insert.
ExecuteScalar() یک دستور را اجرا می‌کند و تنها یک مقدار را برمی گرداند. مثلاً برای برگرداندن اولین خانه از اولین ردیفی که نتیجه ماست استفاده می‌شود.

برای مثال‌ها ما از بین data provider ها، از SQL Server استفاده می‌کنیم. برای ساختن یک شیء command از سازنده بدون پارامتر استفاده می‌کنیم.

SqlCommand command = new SqlCommand();

این شیء تا زمانی که دستور SQL مورد نظرمان که قرار است بر روی بانک اجرا شود، را با استفاده از CommandText به آن ندهیم بدرد نمی‌خورد.

command.CommandText = "SELECT * FROM Students";

دو دستور بالا را به صورت زیر هم می‌توان ادغام کرد :

SqlCommand command = new SqlCommand("SELECT * FROM Students");

بعد از ایجاد یک شیء Command باید یک ارتباط (Connection) هم برای آن تعریف کنیم که بداند دستورات را بر روی کدام بانک اجرا کند. برای این کار یک شیء از کلاس Connection (مثلاً SqlConnection) ایجاد و آن را به خاصیت Connection شیء Command اختصاص می‌دهیم :

SqlConnection connection = new SqlConnection();
SqlCommand command = new SqlCommand();
command.Connection = connection;

یکی دیگر از سربارگذاری های کلاس SqlCommand این است که می‌توان مستقیماً CommandText و Connection را به سازنده آن داد.

SqlCommand command = new SqlCommand("SELECT * FROM Students", connection);

متد دیگری که در کلاس DbConnection وجود دارد متد ()CreateCommand است. این متد یک DbCommand برمی گرداند که connection هم به آن متصل است که می‌توان commandText را به آن داد.

SqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM Students";

برای اجرای دستورات بر روی بانک ابتدا باید یک connection باز کرد. برای خواندن محتویات یک دیتابیس باید از متد ()ExecuteReader استفاده کرد که یک شیء dataReader برمی گرداند که با آن می‌توان به ردیف‌های یک جدول از دیتابیس دسترسی داشت. برای اجرای دستورات update ،Insert ،delete باید از متد ()ExecuteNonQuery استفاده کرد. این متدها در درسهای بعد توضیح داده خواهد شد.