تنظیم ConnetctionString و ارتباط با بانک اطلاعاتی

در حالت کلی برای ارتباط با بانک اطلاعاتی و انجام دستورات مختلف بر روی بانک باید از شی های زیر استفاده کنید :

 

SQLConnection

وظیفه اصلی این کلاس ارتباط با بانک اطلاعاتی است . سازنده این کلاس یک رشته را به عنوان پارامتر میگیرد که رشته اتصال نام دارد . در رشته اتصال خاصیت های مختلفی قرار دارد که به عنوان مثال مسیر بانک اطلاعاتی ، سرور بانک اطلاعاتی ، نام کاربری و رمز عبور بانک اطلاعاتی در آن قرار می گیرد .

 

SQLCommand

دستورات مختلفی را بر روی بانک اطلاعاتی اجرا می کند . در بیشتر برنامه های بانک اطلاعاتی از این شی برای انجام 4 عمل اصلی بر روی بانک استفاده می شود .

 

SQLDataAdapter

DataAdaper را می توان به عنوان یک پل بین منبع اطلاعاتی واقعی (data source) و برنامه خودمان در نظر بگیریم که معمولا همراه DataSet مورد استفاده قرار می گیرد. استفاده DataAdapter و DataSet همراه با هم یک راه حل غیر متصل (disconnected) برای استفاده از منبع اطلاعاتی می باشد . معمولا با استفاده از کلاس تمامی سطر های جداول واکشی و سپس در یک Dataset قرار میگیرد .

 

DataSet

کلاس DataSet به شما این امکان را می دهد که داده ها را به صورت غیر متصل (disconnected) نگهداری و دستکاری کنید. یعنی یک بار از دیتابیس اطلاعات را می کشیم و در این کلاس نگه می داریم و هر کاری داشته باشیم با آن انجام می دهیم. این که می گوییم غیر متصل یعنی ما با اطلاعاتی که در دیتابیس وجود دارد کار می کنیم در حالی که از دیتابیس واقعی جدا هستیم و به آن دسترسی نداریم. در واقع ما به DataSet به عنوان یک دیتابیس کوچک که داخل حافظه قرار دارد نگاه می کنیم.

برای ارتباط با بانک اطلاعاتی ابتدا باید رشته اتصال ( Connection String) را تعریف نماییم . بهتر است رشته اتصال را یکبار در طول برنامه تعریف کنیم تا در سراسر برنامه و برای تمامی دستورات ارتباط با بانک از آن استفاده کنیم . یکی از راه ها ، استفاده از فایل App.Config هست . برای اضافه کردن این فایل به پروژه به صورت زیر عمل نمایید :
image1

image2

image3

همانطور که در شکل بالا مشاهده می کنید فایل App.Config با موفقیت به پروژه اضافه شده است . این فایل از قسمت های مختلفی تشکیل می شود و شما می توانید تنظیمات شخصی ، امنیتی ، رشته های اتصال و… را در این فایل تعریف کنید . در این برنامه ما فقط قصد دارید رشته اتصال را تعریف کنیم . برای این کار تگ connectionString را درون تگ configuration اضافه می کنیم . دوستان عزیز به این نکته توجه کنید که تمامی تگ های باید داخل تگ configuration تعریف شوند ( زیرا این فایل یک فایل XML هست و باید از قوانین XML منجمله اینکه تمامی تگ ها باید داخل یک مادر قرار داشته باشند ، تبعیت کند).
image4
بعد از اینکه تگ connectionString را به فایل اضافه کردین باید رشته اتصال بانک خود را درون این تگ مشخص نمایید . برای اینکار باید از تگ add استفاده کنید . این تگ دارای ویژگی های مختلفی می باشد از جمله provider ، name ، connectionString . شما باید مقدار این خصیصه ها را به درستی تنظیم نمایید . ابتدا از طریق تگ name یک نام واضح برای رشته اتصال تعیین کنید ، از طریق این نام رشته اتصال در سراسر برنامه مورد دسترسی قرار می گیرد . سپس نام provider بانک اطلاعاتی را از طریق مشخصه provider تعیین کنید . برای بانک اطلاعاتی sql server مقدار این گزینه برابر System.Data.SqlClient می باشد . در نهایت از طریق خصیصه ConnectionString مقدار رشته اتصال را مشخص کنید :

image5

در شکل بالا نام رشته اتصال برابر ConnectionString می باشد . بعد از اینکه مقدار رشته اتصال را در فایل App.Config تعریف کردیم باید از آن استفاده کنیم . برای واکشی مقدار رشته اتصال کلاسی به نام ConfigurationManager در فضای نام System.Configuration وجود دارد . با استفاده از این کلاس می توانید قسمت های متخلف App.Config از جمله قسمت ConnectionString را تغییر دهید . برای استفاده از این کلاس به شکل زیر ابتدا باید اسمبلی System.configuration را به پروژه اضافه نماییم :

image6

image7

image8

بر روی فرم دابل کلیک کرده و کدهای زیر را بنویسید :

   1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Text;
   7: using System.Windows.Forms;
   8: 
   9: using System.Data.SqlClient;
  10: using System.Configuration;
  11: 
  12: 
  13: namespace frmMain
  14: {
  15:     public partial class frmMain : Form
  16:     {
  17: 
  18:             private SqlConnection DataBaseConnection;
  19:             private SqlCommand Command1;
  20:             private SqlDataAdapter DataAdapter1;
  21:             private DataSet DataSet1;
  22: 
  23:             public frmMain()
  24:             {
  25:             
  26:                 string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  27:                 this.DataBaseConnection = new SqlConnection(ConnectionString);
  28:                 this.Command1 = this.DataBaseConnection.CreateCommand();
  29:                 this.DataAdapter1 = new SqlDataAdapter(Command1);
  30:                 this.DataSet1 = new DataSet();
  31: 
  32:                 InitializeComponent();
  33:             }
  34:         
  35:         }
  36:     }

همانگونه که در خطوط 9 و 10 کد بالا مشاهده می کنید فضای نام های زیر را به کلاس اضافه کرده ایم:

using System.Data.SqlClient;
using System.Configuration;

مقدار تمامی رشته های اتصال در خصوصیت ConnectionStrings قرار دارد . باید نام رشته اتصال را به این خصوصیت ارسال کنید . فضای نامی که در خط 10 کد بالا اضافه شده است برای دسترسی به رشته اتصال می باشد. سپس در خط 26 مقدار رشته اتصال بدست می آید :

string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

در خطوط 21- 18 فیلد های زیر تعریف شده اند:

private SqlConnection DataBaseConnection;
private SqlCommand Command1;
private SqlDataAdapter DataAdapter1;
private DataSet DataSet1;

ما فیلدهایی را که برای وصل شدن به دیتابیس و تعریف کردن دستور SQL مورد استفاده قرار می گیرد را تعریف کرده ایم. فیلدها را به جای آنکه به عنوان متغیر های محلی تعریف کنیم به عنوان فیلدهای کلاس تعریف می کنیم. این کار باعث می شود که فیلدها همیشه در دسترس باشد و از تکرار کدنویسی جلوگیری شود (مثلا مجبور نشویم یک Connection برای بروزرسانی دانشجو و یکی دیگر برای حذف کردن بسازیم). سپس در سازنده کلاس کد های زیر را قرار دهید :

  26: string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  27: this.DataBaseConnection = new SqlConnection(ConnectionString);
  28: this.Command1 = this.DataBaseConnection.CreateCommand();
  29: this.DataAdapter1 = new SqlDataAdapter(Command1);
  30: this.DataSet1 = new DataSet();

در سازنده کلاس فرم (خطوط 33 – 23) فیلدهای کلاس مقداردهی می شوند مثلا connection مقداردهی می شود و connection string برای آن مشخص می شود. برای ارتباط با بانک اطلاعاتی نیاز به یک شی Connection داریم . به این خاطر که بانک اطلاعاتی ما SQL Server هست باید یک شی از کلاس SQLConnection ایجاد کنیم . سپس مقدار رشته اتصال را برای سازنده آن ارسال می کنیم . در خط 28 دستور را ایجاد می کنیم . با استفاده از Command دستوراتی راه به بانک اطلاعاتی ارسال می کنیم . مثلا دستور ثبت اطلاعات ، حذف و… . برای ایجاد شی Command دو راه داریم . یا اینکه با استفاده از عملگر new یک شی از این کلاس ایجاد کنیم و مقدارخاصیت Connection آن را به طور دستی مقدار دهی کنیم به شکل زیر :

this.Command1 = new SqlCommand();
Command1.Connection = this.DataBaseConnection;

یا اینکه به راحتی می توانیم متد CreateCommand شی Connection را فراخوانی کنیم :

this.Command1 = this.DataBaseConnection.CreateCommand();

خط بالا عملی مشابه ای با کد قبلی انجام می دهد و دستوری را ایجاد می کند که به طور خودکار به شی کانکشن متصل است . در خط 29 شی DataAdapter را ایجاد کرده ایم . این شی به طور خلاصه به شکل یک میانجی بین بانک و برنامه عمل می کند به طوری که دستوری را از برنامه می گرد و روی بانک اعمال می کند یا اینکه رکوردهایی را از بانک گرفته و به برنامه تحویل می دهد . دستوری که این شی روی بانک اعمال می کند از طریق سازنده آن مشخص می کنیم . در خط آخر هم DataSet را ایجاد کرده ایم . وظیفه اصلی این کلاس نگهداری اطلاعاتی است که از بانک اطلاعاتی واکشی می کنیم . معمولا از این کلاس به عنوان منبع داده Datagridview استفاده می کنیم. در این درس با نحوه ی ارتباط با بانک اطلاعاتی آشنا شدیم . با استفاده از کد هایی که در بالا نوشتیم می توانیم با بانک اطلاعاتی ارتباط برقرار کنیم . در درس های بعدی شما را با نحوه ی درج اطلاعات در بانک آشنا می کنم .

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. arashbashiri پاسخ دادن

    با طراحی این وب سایت حرکت بزرگی را شروع کردید.معمولا مطالبی که در مورد #C در وب سایتهای فارسی هست به صورت ناقص از منبع خارجی نقل شده و یا خود نویسنده کد را به صورت کامل تست نکرده. فایل ها به صورت زیپ یا rar نیز که خطر انتقال ویروس را به همراه فیلم و پروژه دارد.
    کتاب های آموزشی هم هیچکدام در جزئیات اجرایی ریز نمیشوند و این خلاء به کمک دوستانی مثل شما پر میشود.
    امیدوارم با مبلغ ناچیزی که به عنوان اشتراک پرداخت می کنیم بتونیم از شما و کارتون پشتیبانی کنیم.
    سپاس

    • یونس ابراهیمی پاسخ دادن

      بسیار ممنون از لطفتون

  2. m karimy پاسخ دادن

    با سلام
    این دوستمون درست فرمودند. من خودمم حدودن چند وقتیه میخام معماری چند لایه یاد بگیرم. کلی آموزش به شکل های مختلف را مطالعه کردم. تا جایی که من کار کردم، هرکدوم به نوعی با دید متفاوتی به این مسئله نگاه کردن ضمن اینکه آموزش ها هم کامل نبوده اند. جای تشکر بسیار هست از شما وتمام دوستان تلاشگرتون. انشالا آموزش هاتون توی مبحث را ادامه بدید.