با عرض سلام همراهان گرامی ، حالتون چطوره؟ شاد وسلامت هستید؟ با اموزش امروز ما که در مورد asp و The SqlConnection Object همراه ما بمانید.این درس آبجکت SqlConnection و چگونگی اتصال به یک دیتابیس را توصیف می کند. در اینجا اهداف این درس را مشاهده می کنید:

· آگاهی از اینکه آبجکت های اتصال چه استفاده ای دارند.

· یادگیری چگونگی نمونه گذاری یک آبجکت SqlConnection.

· درک چگونگی استفاده از آبجکت SqlConnection در برنامه ها.

· درک اهمیت سازماندهی طول عمر مفید اتصال.

مقدمه:

اولین کاری که در هنگام تعامل با یک دیتابیس لازم است انجام دهید، ایجاد یک اتصال می باشد. این اتصال به بقیه ی کد ADO.NET می گوید که در حال ارتبط با کدام دیتابیس می باشد. این اتصال تمام منطق سطح پایین در ارتباط با پروتوکل های پایگاه داده ی خاص را مدیریت می کند. این مسئله کار را برای شما آسان می کند، زیرا بیشترین کاری که مجبور به انجام آن در کد خواهید بود، نمونه گذاری آبجکت اتصال، بازکردن اتصال و سپس بستن آندر هنگام تکمیل کار می باشد. به خاطر روشی که دیگر گروه ها در ADO.NET ساخته می شوند، گاهی اوقات حتی مجبور به انجام این کارها نیز نیستید.

گرچه کار با اتصالات در ADO.NET بسیار آسان می باشد، لازم است متوجه اتصالات باشید تا در هنگام کدگذاری روال دسترسی به داده ها، تصمیم های درست بگیرید، پی ببرید که یک اتصال یک منبع با ارزش می باشد. مطمئن باشید که اگر یک برنامه ی کاربری تک کاربری stand-alone)) دارید که روی یک دیتابیس مجزا کار می کند، احتمالا به آن اهمیت نمی دهید. به هرحال به یک برنامه ی مهم فکر کنید که در آن صدها یوزر از طریق یک شرکت به به یک دیتابیس دسترسی دارند. هر اتصال پیش رو را نشان می دهد و تنها تعداد محدودی از آنها می تواند وجود داشته باشد. برای بررسی یک مورد جدی تر، یک وب سایت را در نظر بگیرید که روزانه صدها و هزاران کاربر دارد. برنامه هایی که اتصالات را گرفته و به آنها اجازه پیشروی نمی دهند، می توانند تاثیرات منفی جدی روی اجرا و مقیاس پذیری داشته باشند.

ایجاد یک آبجکت sqlConnection:

SqlConnection آبجکتی مانند هر آبجکت دیگر C# می باشد. اکثر اوقات شما فقط همزمان SqlConnection را بیان کرده و نمونه گذاری می کنید، همانطور که در زیر نشان داده شده است:

SqlConnection conn = new SqlConnection(‎

‎ “Data Source=(local);Initial Catalog=Northwind;Integrated ‎Security=SSPI”);‎

آبجکت نمونه گذاری شده ی بالا از یک سازنده با یک استدلال مجزا از نوع رشته استفاده می کند. این استدلال یک رشته ی اتصال نامیده می شود. جدول ۱ بخش های متداول یک رشته ی اتصال را توصیف می کند.

جدول ۱٫ رشته های اتصال ADO.NET حاوی جفت های کلید/مقدار (key/value) می باشند برای تعیین چگونگی ساخت اتصال دیتابیس. آنها حاوی موقعیت، نام دیتابیس و اطلاعات کاربردی می شوند.

Connection String Parameter Name

Description

Data Source

سرور را تشخیص می دهد. می تواند یک ماشین داخلی، نام دامنه ی ماشین و یا آدرس IP باشد.

Initial Catalog

نام دیتابیس

Integrated Security

یک SSPI برای ساخت اتصال با پنجره های login یوزر تنظیم می کند.

User ID

نام یوزر پیکربندی (configured) در SQL Server

Password

پسوورد هماهنگ با SQL Server User ID.

Integrated Security هنگامی برقرار می باشد که شما روی یک ماشین مجزا در حال انجام توسعه می باشید. به هرحا اغلب اوقات می خواهید امنیت را براساس یک SQL Server User ID با مجوزهای تنظیم شده ی خاص برای برنامه ی مورد استفاده ی خود، تنظیم کنید. کد زیر یک رشته ی اتصال با استفاده از پارامترهای User ID و Password را نشان می دهد.

‎ SqlConnection conn = new SqlConnection(‎

‎ “Data Source=DatabaseServer;Initial Catalog=Northwind;User ‎ID=YourUserID;Password=YourPassword”);‎

به چگونگی تنظیم Data Source بر DatabaseServer دقت داشته باشید که نشان می دهد می توانید یک دیتابیس واقع شده روی یک ماشین متفاوت، روی یک LAN یا روی Internet را تشخیص دهید. علاوه بر این User ID و Password جایگزین پارامتر Integrated Security می شوند.

استفاده از یک Sqlconnection

هدف از ایجاد یک آبجکت SqlConnection این است که بتوانید کد ADO.NET را برای کار با یک دیتابیس فعال سازید. دیگر آبجکت های ADO.NET ، مانند یک SqlCommand و یک SqlDataAdapter آبجکت اتصال را به عنوان پارامتر می گیرند. توالی عملکردهای اتفاق افتاده در طول عمر یک SqlConnection مانند زیر می باشند:

۱٫ نمونه گذاری SqlConnection.

۲٫ بازکردن اتصال.

۳٫ انتقال اتصال به دیگر آبجکت های ADO.NET.

۴٫ اجرای عملکردهای دیتابیس با دیگر آبجکت های ADO.NET.

۵٫ بستن اتصال.

تقریبا چگونگی نمونه گذاری یک SqlConnection را مشاهده کردیم. بقیه ی مراحل شامل بازکردن، انتقال، استفاده و بستن در لیست ۱ نشان داده می شوند.

لیست ۱٫ استفاده از SqlConnection

using System;

using System.Data;

using System.Data.SqlClient;

‎///

‎/// Demonstrates how to work with SqlConnection objects

‎///

class SqlConnectionDemo

‎{

‎ static void Main()

‎ {

‎ // ۱٫ Instantiate the connection

‎ SqlConnection conn = new SqlConnection(

‎ “Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI”);

‎ SqlDataReader rdr = null;

‎ try

‎ {

‎ // ۲٫ Open the connection

‎ conn.Open();

‎ // ۳٫ Pass the connection to a command object

‎ SqlCommand cmd = new SqlCommand(“select * from Customers”, conn);

‎ //

‎ // ۴٫ Use the connection

‎ //

‎ // get query results

‎ rdr = cmd.ExecuteReader();

‎ // print the CustomerID of each record

‎ while (rdr.Read())

‎ {

‎ Console.WriteLine(rdr[0]);

‎ }

‎ }

‎ finally

‎ {

‎ // close the reader

‎ if (rdr != null)

‎ {

‎ rdr.Close();

‎ }

‎ // ۵٫ Close the connection

‎ if (conn != null)

‎ {

‎ conn.Close();

‎ }

‎ }

‎ }

‎}‎

همانطور که در لیست ۱ نشان داده شده است، با فراخوانی روش Open() از نمونه ی SqlConnection یک اتصال را باز می کنید. هر عملکردی روی اتصال که هنوز باز نشده بود، یک استثنا تولید خواهد کرد. بنابراین باید اتصال را قبل از استفاده از آن باز کنید.

قبل از استفاده از یک SqlCommand باید به کد ADO.NET اجازه بدهید که بداند چه اتصالی نیاز دارد. در لیست ۱، دومین پارامتر را روی آبجکت SqlCommand با آبجکت SqlConnection ، conn تنظیم می کنیم. عملکردهای اجرا شده با SqlCommand از آن اتصال استفاده خواهند کرد.

کدی که از اتصال استفاده می کند، آبجکت SqlCommand می باشد که یک query روی جدول مشتریان (Customers) اجرا می کند. مجموعه ی نتیجه به عنوان یک SqlDataReader بازگشت داده می شود و لوپ while اولین ستون از هر ردیف را در مجموعه ی نتیجه می خواند، که ستون CustomerID می باشد. در مورد آبجکت های SqlCommand و SqlDataReader در بخش های بعدی بحث خواهیم کرد. اکنون برای شما درک این مطلب مهم می باشد که این آبجکت ها در حال استفاده از آبجکت SqlConnection می باشند، بنابراین می دانند با چه دیتابیسی تعامل داشته باشند.

وقتی استفاده از آبجکت اتصال را کامل کردید، باید آن را انجام دهید. شکست در انجام این کار می تواند پیامدهای مهمی در اجرا و مقیاس پذیری برنامه ی شما داشته باشد. دو نکته در مورد چگونگی بستن اتصال در لیست ۱ وجود دارد: روش Close() در گروه نهایی فراخوانده می شود و قبل از بستن اتصال اطمینان حاصل می کنیم که پوچ (null) نیست.

دقت داشته باشید که کد ADO.NET را در یک بلوک try/finally پیچیدیم. همانطور که در بخش Lesson 15: Introduction to Exception Handling از آموزش C# توضیح داده شد، در نهایت بلوک ها کمک می کنند که اجرای بخش خاصی از کد تضمین شود، بدون توجه به تولید یک استثنا (exception). از آنجایی که اتصالات دارای منابع کمیاب سیستم می باشند، تمایل خواهید داشت که اطمینان حاصل کنید که در بلوک های finally بسته شده اند.

احتیاط دیگری که در هنگام بستن اتصالات باید داشته باشید، این است که باید مطمئن شوید آبجکت اتصال پوچ (null) نیست. اگر در هنگام نمونه گذاری اتصال اشتباهی رخ دهد، این اتصال پوچ خواهد بود و شما می خواهید اطمینان حاصل کنید که سعی در بستن یک اتصال نامعتبر ندارید که یک استثنا نیز تولید می کند.

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

خلاصه:

آبجکت های SqlConnection به دیگر کدهای ADO.NET اجازه می دهند تا بدانند به چه دیتابیسی متصل شوند و چگونه این اتصال را برقرار سازند. آنها با انتقال یک رشته ی اتصال به همراه یک مجموعه از جفت های key/value ، که اتصال را تعریف می کنند، نمونه گذاری می شوند. مراحلی که برای سازماندهی طول عمر یک اتصال استفاده می کنید، عبارتند از creat، open، pass، use و close. مطمئن باشید برای بستن اتصال به درستی، یک نشت منبع اتصال ندارید (resource leak).