ارتباط با بانک اطلاعاتی توسط روش متصل (Online)
کار کردن با بانک اطلاعاتی رو به دو بخش اصلی متصل و غیر متصل تقسیم میکنیم :
کار با بانک اطلاعاتی بصورت متصل :
هنگام استفاده از اشیا و متد های زیر ارتباط بین فرم و بانک در تمام مدت باید برقرار باشد برای همین این نوع کار با بانک را متصل می نامند. معمولا این نوع کار با بانک از سرعت بسیار بالاتری نسبت به روش دوم که غیر متصل نام دارد برخوردار است.
همانطور که مستحضر هستید برای تقاضا از یک جدول در بانک اطلاعاتی باید مراحل زیر طی شود :
- اضافه نمودن فضا نام های مورد نیاز : برای ارتباط با بانک های اطلاعاتی به فضا نام System.Data و همچنین فضا نام System.Data.SqlClient برای کار با دیتابس SQL Server و فضا نام System.Data.Oledb برای کار با بانک Access نیازمندیم .
- تعیین رشته اتصال (Connection String) : رشته اتصال رشته شامل تنظیماتی جهت اتصال به بانک اطلاعاتی می باشد ، این رشته برای هر بانک متفاوت خواهد بود
- تعیین شی اتصال (Connection Object) : کلاسی است برای برقراری ارتباط با بانک اطلاعاتی است ، این شی که از کلاس DbConnection ارث بری می کند اعمالی مانند باز و بسته کردن اتصال با بانک را از طریق رشته اتصال انجام می دهد.
- تعیین رشته تقاضا (Command Text) : همان دستورات SQL است که جهت یک تفاضا ارائه می گردد ، این تفضا جهت دریافت اطلاعات (Select) درج اطلاعات (Insert) ، ویرایش اطلاعات(Update) و یا حذف اطلاعات(Delete) یا... صورت می گیرد .
- تعیین شی تقاضا (Command Object) : کلاسی است جهت ارسال و دریافت تقاضا از طریق شی اتصال به بانک اطلاعاتی
- باز کردن اتصال
- اجرای درخواست
- دریافت اطلاعات (در صورتی که تقاضا Select باشد)
- بستن اتصال
- درج ، حذف و بروز رسانی » برای درج ، حذف و بروز رسانی به صورت متصل و مستقیم از متد ExecuteNoneQuery مربوط به شی Command استفاده می شود . این شی درخواست مربوط به insert,delete,update یا هر درخواست دیگری را بدون هیچ درخواستی انجام میدهد و خروجی آن تعداد سطر های تحت تاثیر درخواست می باشد.
خوب اکنون طبق مراحل 9 گانه عمل می کنیم :
1- فضا نام های مورد نیاز را اضافه می کنیم :
using System.Data;
using System.Data.SqlClient;2
2- رشته اتصال را برای یک اتصال امن به دیتابیس SQL Server ایجاد می نماییم (برای اطلاعات بیشتر در مورد رشته های اتصال بانک های مختلف به سایت ConnectionStrings.com مراجعه نمایید ) :
string connectionString = "Data Source=(local);Initial Catalog=myDataBase;Integrated Security=SSPI;";
3- شی اتصال را ایجاد کرده ، رشته اتصال را به صورت ورودی در Constructor وارد می نماییم :
SqlConnection conObj = new SqlConnection(connectionString);
4- رشته تقاضا را برای درج یک رکورد در جدول مورد نظر می نویسیم :
string commandText = "insert into myTbl(name,family) values('ali','delshad')";
5- شی تقاضا را ایجاد کرده و شی اتصال و رشته تقاضا را در ورودی مقدار دهی می نماییم :
SqlCommand cmdObj = new SqlCommand(commandText, con);
6- اتصال را باز می کنیم :
conObj.Open();
7- اجرای درخواست توسط متد ExecuteNoneQuery از شی تقاضا
cmdObj.ExecuteNonQuery();
8- بستن اتصال :
conObj.Close();
کد های شما در نهایت به صورت زیر خواهد بود :
string connectionString = "Data Source=(local);Initial Catalog=myDataBase;Integrated Security=SSPI;";
SqlConnection conObj = new SqlConnection(connectionString);
string commandText = "insert into myTbl(name,family) values('ali','delshad')";
SqlCommand cmdObj = new SqlCommand(commandText, con);
conObj.Open();
cmdObj.ExecuteNonQuery();
conObj.Close();
- دریافت اطلاعات از بانک اطلاعاتی » برای دریافت اطلاعات از بانک از متد ExecuteReader شی تقاضا استفاده می کنیم ، یک شی از نوع SqlDataReader تعریف کرده و مقدار ExecuteReader را برابر آن قرار می دهیم ، سپس از طریق متد Read شی DataReader اطلاعات را در یک حلقه واکشی می کنیم :
string connectionString = "Data Source=(local);Initial Catalog=myDataBase;Integrated Security=SSPI;";
SqlConnection conObj = new SqlConnection(connectionString);
string commandText = "select * from myTbl";
SqlCommand cmdObj = new SqlCommand(commandText, con);
conObj.Open();
SqlDataReader dr = cmdObj.ExecuteReader();
while (dr.Read())
{
Response.Write(dr["name"].ToString());
}
conObj.Close();
همانطور که ملاحظه می کنید سایر مراحل مشابه مراحل قبل است ، در کد فوق در یک حلقه While اطلاعات خوانده شده و مقادیر فیلد name بر روی صفحه چاپ می شود .
همچنین شما می توانید خود dr را به صورت یک دتیاسورس به یک کنترل داده ای مانند GridView نسبت دهید :
SqlDataReader dr = cmdObj.ExecuteReader();
GridView1.DataSource = dr;
GridView1.DataBind();
- دریافت مقدار واحد از بانک » خیلی وقتها پیش می آید که ما فقط نیاز مند دریافت یک مقدار واحد مانند نام یک محصول ، تعداد اعضا ، نام کاربری عضو خاص و ... می باشیم . دات نت در این مورد متد بسیار جالبی رو پیشنهاد کرده این متد ExecuteScaler نام دارد و اولین سطر از اولین ستون دستور select رو بر می گرداند . این متد به علت سرعت بالایی که دارد برای دریافت مقادیر واحد پیشنهاد می شود :
string connectionString = "Data Source=(local);Initial Catalog=myDataBase;Integrated Security=SSPI;";
SqlConnection conObj = new SqlConnection(connectionString);
string commandText = "select count(*) from myTbl";
SqlCommand cmdObj = new SqlCommand(commandText, con);
conObj.Open();
Response.Write(cmdObj.ExecuteScalar().ToString());
conObj.Close();
در کد فوق تعداد رکورد های جدول مورد نیاز توسط متد ExecuteScaler دریافت شده و بر روی صفحه چاپ می شود .