( تعداد نمایش : 949 )

برنامه نویسی بهتر با Typed DataSet – قسمت اول

در این مقاله برآنیم تا شما را با یکی از قویترین و کارآمدترین روشهای کار با DataSetها آشنا کنیم. بعبارت دیگر می خواهیم شما را با نوع جدیدی از DataSet یعنی Typed DataSet آشنا کنیم و نحوه ایجاد، بکارگیری و فواید آن را با هم ببینیم. بنابراین لازم است که شما قبلا با DataSet و کاربردهای آن آشنا بوده و یا با آن کار کرده باشید. استفاده از Typed DataSet سبب می شود تا برنامه های شما جامع تر و بهتر شده و نیز از طرف دیگر برنامه شما اصطلاحاً type safety می شود.

در این مقاله شما احتمالا به ابزارهای زیر نیاز دارید:

• Visual Studio.NET
• Windows 2000
• Visual C#
• SQL Server 2000

فراموش نکنید که فرض این مقاله بر این است که شما با ADO.NET DataSet و مفاهیم مربوط به آن کاملاً آشنا هستید.

Typed DataSet برعکس DataSet، مجموعه ای از کلاس های استاندارد NET Framework. نیست بلکه عبارت است از مجموعه کلاس هایی که به کمک ابزارهایی در NET Framework. توسط برنامه نویس تولید می شود و علاوه بر خواص و قابلیتهای موجود در DataSet، دارای متدها، رویداد(event)ها و صفات اضافه و مختص به خود می باشد.

واضح است که Typed DataSet برای اینکه تمامی خواص و ویژگیهای DataSet را داشته باشد لازم است که از DataSet مشتق یا به ارث گرفته شده باشد و همینگونه نیز می باشد. بنابراین Typed DataSet کلاسی است که از DataSet به ارث گرفته شده است و دارای صفات و متدهای اضافه تری جهت برآورده کردن اهداف مورد نظر می باشد.

یکی از این اهداف دسترسی آسان و مطمئن به جداول (table) و فیلدهای داده ای با استفاده از نام آنها می باشد. در DataSet معمولی شما مجبور هستید که از متدهای اصطلاحاً collection-based و اندیس های تودرتو برای دستیابی به جداول و محتویات آنها استفاده کنید. همانگونه که می دانید اکثر این اندیس ها متنی می باشند و اشتباهات تایپی شما تنها در زمان اجرا نمایان خواهند شد و این مساله می تواند برای شما آزار دهنده بوده و یا باعث ایجاد خطاهای منطقی شود که رفع آنها ممکن است ساعتها وقت شما را بخود اختصاص دهد.

علاوه بر قابلیت خواندن بالایی که Typed DataSet به کد برنامه شما می دهد، استفاده از Typed DataSet سبب می شود تا بتوانید از امکان Intellisense محیط ویرایشگر Visual Studio .NET بهره برده و کد برنامه شما راحتتر و سریعتر تایپ شود. همچنین Typed DataSet این امکان را برای شما فراهم می سازد تا کامپایلر مورد استفاده تان نوع فیلدها را در زمان کامپایل تشخیص داده و در صورت نسبت دادن مقادیر با تایپ های مختلف به یکدیگر، خطای لازم را اعلام نماید. دقت داشته باشید که اینکار در زمان کامپایل صورت می گیرد و نه در زمان اجرا و این چیزی نیست جز دسترسی type-safe به DataSet و در نتیجه افزایش قابلیت اطمینان برنامه شما! به همین دلیل است که به این نوع DataSet اصطلاحاً Typed DataSet می گوئیم.

تفاوت DataSet و Typed DataSet

تفاوتهای زیادی از لحاظ شکل نوشتن برنامه گرفته تا کارآیی بین این دو وجود دارد. در این قسمت این تفاوتها را از لحاظ type-safety و شکل ظاهری با ذکر دو مثال بررسی می کنیم.

در کد برنامه زیر از DataSet معمولی استفاده شده است:

String connectionString = “server=localhost;Trusted_Connection=yes;database=Northwind”;

SqlConnection conn = new SqlConnection(connectionString);

SqlDataAdapter EmployeesDA = new SqlDataAdapter(“SELECT * FROM EMPLOYEES;”, conn);

DataSet ds = new DataSet();

EmployeesDA.Fill(ds, “Employees”);

//Name of the table is misspelled to Employes
//instead Employees, which is wrong
// در اینجا نام جدول عمدا اشتباه تایپ شده است
Console.WriteLine(ds.Tables["Employes"].Rows[0]["FirstName"]);

//LastName contains one space at the end, which is wrong
// در اینجا عمدا یک فضای خالی بعد از Lastname آورده شده است
Console.WriteLine(ds.Tables["Employees "].Rows[0]["LastName "]);

//this is wrong because ReportsTo must be an employeeID,
//an integer value
// در اینجا اشتباها یک مقدار رشته حرفی به یک متغیر عددی نسبت داده شده است
ds.Tables["Employees"].Rows[0]["ReportsTo"] = “Paul”;

می بینید که در کد برنامه بالا مجبور هستیم که از نام جدول و فیلدها بعنوان اندیس استفاده کنیم که احتمال اشتباه تایپی در آن بسیار زیاد است و ما به عمد این اشتباهات را انجام داده ایم. همچنین به عمد یک رشته حرفی را به متغیری از نوع عددی منسوب نموده ایم. هیچیک از این اشتباهات در زمان کامپایل برنامه تشخیص داده نخواهد شد در عوض این اشتباهات در زمان اجرای برنامه خود را بصورت خطای زمان اجرا نشان خواهند داد که بهیچ عنوان مطلوب و پذیرفته نیست.

در کد برنامه زیر از Typed DataSet استفاده شده است:

String connectionString = “server=localhost;Trusted_Connection=yes;database=Northwind”;

SqlConnection conn = new SqlConnection(connectionString);

SqlDataAdapter EmployeesDA = new SqlDataAdapter(“SELECT * FROM EMPLOYEES”, conn);

//Creating an Instance of Typed DataSet “EmployeesTDS”
EmployeesTDS ds = new EmployeesTDS();

EmployeesDA.Fill(ds, “Employees”);

Console.WriteLine(ds.Employees[0].FirstName);
Console.WriteLine(ds.Employees[0].LastName);

//this is wrong because ReportsTo must be an employeeID,
//an integer value
ds.Employee[0].ReportsTo = “Paul”;

در این حالت ما از نام جداول و فیلدها بصورت اسامی یک سری صفت تعریف شده و مشخص استفاده کرده ایم و نه بصورت یک عبارت حرفی که می تواند حاوی هر چیزی باشد. بعبارت دیگر در این حالت ما اصولاً مجاز به استفاده از نام یا نامهای دیگری نیستیم و تنها از نامهای تعیین شده برای یک سری صفت یا متد باید استفاده کنیم. خطاهای موجود در کد برنامه فوق در زمان کامپایل برنامه اعلام می شود و این مزیت بسیار قابل توجهی نسبت به DataSet معمولی می باشد.

مقایسه کد برنامه های فوق نشان می دهد که استفاده از Typed DataSet چقدر آسان و راحت بوده و به چه میزان قابلیت خواندن برنامه ما را بالا برده و سبب می شود تا به آسانی برنامه خود را مدیریت و نگهداری کنیم.

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن