کلاس 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 استفاده کرد. این متدها در درسهای بعد توضیح داده خواهد شد.
با سلام. این خطا چرا رخ می دهد؟
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 – Local Database Runtime error occurred. The specified LocalDB instance does not exist.