با سلام خدمت شما عزیزان ، در این بخش میخوام در مورد اعلانات ADO.NET و کاربرد آن در ASP توضیح میدم . پس با ماهمراه باشید.
ADO.NET یک پل ارتباطی بین کنترل های front end و پایگاه داده ی back end فراهم می آورد. اشیا ADO.NET تمامی عملیات دسترسی به داده را کپسوله سازی می کند. کنترل ها برای نمایش داده با این اشیا تعامل و ارتباط برقرار می کند، به همین دلیل جزئیات جا به جایی داده ها پنهان می شود.
شکل زیر اشیا ADO.NET را به صورت مختصر نمایش می دهد.
clip_image001
کلاس DataSet
مجموعه داده ای (data set) در واقع زیر مجموعه ای از پایگاه داده (data base) محسوب می شود. این کلاس یک ارتباط پیوسته با پایگاه داده ندارد. جهت بروز رسانی پایگاه داده به اتصال دوباره (reconnection) احتیاج است. کلاس DataSet دربردارنده ی اشیا DataTable و DataRelation می باشد. اشیا DataRelation بیانگر ارتباط بین دو جدول می باشد.
جدول زیر برخی از خاصیت های (property) مهم و کارامد این کلاس را فهرست می کند.
خواص
شرح
CaseSensitive
این خاصیت مشخص می کند آیا مقایسه ی رشته ها داخل جداول داده به کوچک و بزرگی حروف حساس هستند یا خیر.
Container
ظرف دربردارنده ی مولفه ی (component) مورد نظر را برمی گرداند.
DataSetName
اسم data set (مجموعه داده) جاری را گرفته یا تنظیم می کند.
DefaultViewManager
به وسیله ی این خاصیت می توان نمایی (view) از داده های موجود در data set برگرداند که امکان فیلتر کردن، جستجو و پیمایش را با استفاده از یک DataViewManager سفارشی فراهم می آورد.
DesignMode
این خاصیت نشان می دهد آیا مولفه (کامپوننت) مورد نظر هم اکنون در حالت design mode قرار دارد یا خیر.
EnforceConstraints
مشخص می کند آیا به هنگام اجرای هرگونه عملیات بروز رسانی، قوانینی که محدودیت اعمال می کنند (constraint rule) لحاظ شده و رعایت می شوند یا خیر.
Events
فهرستی از event handler های متصل به کامپوننت مورد نظر را برمی گرداند.
ExtendedProperties
مجموعه اطلاعات سفارشی یا اختصاصی کاربر که مربوط به کلاس DataSet می باشد را باز می گرداند.
HasErrors
این خاصیت مشخص می کند آیا خطا یا اشکالی وجود دارد یا خیر.
IsInitialized
نشان می دهد آیا DataSet مقداردهی اولیه شده است یا خیر.
Locale
اطلاعات محلی که به منظور مقایسه کردن رشته های داخل جدول بکار می رود را تنظیم (getیا set) می کند.
Namespace
این خاصیت فضای نام (namespace) کلاس DataSet را تنظیم (get یا set) می کند.
Prefix
خاصیت prefix به منظور شناسایی المان هایی که به کلاس DataSet تعلق دارند در سرتاسر یک سند XML بکار می رود.
Relations
آرایه یا مجموعه ای از اشیا کلاس DataRelation برمی گرداند.
Tables
آرایه ای (collection) از اشیا DataTable بازمی گرداند.
جدول زیر نیز تعدادی از متدهای مهم و پرکاربرد کلاس DataSet را ارائه می دهد.
توابع
شرح
AcceptChanges
این متد کلیه ی تغییرات یا اصلاحاتی که از زمان بارگذاری کلاس DataSet و یا فراخوانی تابع مزبور (AcceptChanges) اعمال شده را حفظ کرده و می پذیرد.
BeginInit
مقداردهی اولیه ی کلاس DataSet را راه اندازی می کند. فرایند مقداردهی اولیه درست در زمان اجرا (run time) رخ می دهد.
Clear
متد Clear کلیه ی داده ها را حذف می کند.
Clone
ساختار کلاس DataSet شامل شِما / schema DataTable ، رابطه ها (relations)، محدودیت ها (constraints) را کپی (نمونه سازی) می کند. توجه داشته باشید که این متد خود داده ها را کپی نمی کند.
Copy
این تابع هم ساختار و هم خود داده را کپی می کند.
CreateDataReader()
به ازای هر DataTable یک مجموعه از شی DataTableReader، به همان ترتیبی که جداول در مجموعه (collection) Tables قرار می گیرند (ظاهر می شوند)، برمی گرداند.
CreateDataReader(DataTable[])
به ازای هر DataTable یک شی DataTableReader برمی گرداند.
EndInit
مقداردهی اولیه ی مجموعه داده را خاتمه می دهد.
Equals(Object)
تعیین می کند آیا شی مورد نظر با شی جاری برابر هست یا خیر.
Finalize
منابع را آزاده ساخته و امکان اجرای دیگر عملیات پاک سازی را فراهم می آورد.
GetChanges
یک کپی از DataSet به همراه تمامی تغییراتی که از زمان بارگذاری این کلاس یا فراخوانی متد AcceptChanges اعمال شده، بازمی گرداند.
GetChanges(DataRowState)
یک کپی از DataSet به همراه تمامی تغییراتی که از زمان بارگذاری این کلاس یا فراخوانی متد AcceptChanges ایجاد شده برمی گرداند که توسط شئ DataRowState فیلتر می شود.
GetDataSetSchema
کپی از XmlSchemaSet برای DataSet برمی گرداند.
GetObjectData
اطلاعات لازم برای سریال کردن DataSet را بازگردانی می نماید.
GetType
نوع نمونه (instance) جاری را بر می گرداند.
GetXML
داده را در قالب XML برمی گرداند.
GetXMLSchema
شِمای XSD را برای نمایش داده ها در قالب XML برمی گرداند.
HasChanges()
این تابع مقداری برمی گرداند که نشانگر وجود یا عدم وجود تغییر و اصلاحات در DataSet می باشد (این تغییرات شامل سطرهای (row) جدید، پاک یا اصلاح شده می باشد).
HasChanges(DataRowState)
این تابع مقداری برمی گرداند که نشانگر وجود یا عدم وجود تغییر و اصلاحات در DataSet می باشد (این تغییرات شامل سطرهای (row) جدید، پاک یا اصلاح شده می باشد( که توسط شئ DataRowState فیلتر می شود.
IsBinarySerialized
قالب (فرمت( نمایش DataSet سریال شده را بررسی می کند.
Load(IDataReader, LoadOption, DataTable[])
DataSet را با مقادیر ی از یک منبع داده ای با استفاده از IDataReader ارائه شده و آرایه ای از نمونه های DataTable پر می کند تا از این طریق اطلاعات شِما و فضای نام را فراهم کند.
Load(IDataReader, LoadOption, String[])
DataSet را با مقادیر ی از یک منبع داده ای با استفاده از IDataReader ارائه شده و آرایه ای از رشته ها پر می کند تا بدین وسیله اسامی لازم برای جداول درون DataSet فراهم شود.
Merge()
داده ها را با داده هایی مشتق شده از یک DataSet دیگر ادغام می کند. این متد دارای اشکال overload شده ی مختلفی می باشد.
ReadXML()
داده ها و شمای XML را از درون DataSet می خواند.
این متد فرم های overload شده ی مختلفی دارد.
ReadXMLSchema(0)
یک شمای XML را از DataSet می خواند.
این تابع حالت های overload شده ی مختلفی دارد.
RejectChanges
تمامی تغییرات اعمال شده از زمانی که متد AcceptChanges برای آخرین بار فراخوانده شد را به حالت اول برمی گرداند.
WriteXML()
داده های موجود را بر اساس DataSet به صورت XML می نویسد. این تابع به صورت های مختلف overload شده است.
WriteXMLSchema()
ساختار DataSet را به صورت XML (در قالب یا با شِمای XML) می نویسد. این متد به اشکال مختف overload می شود.
کلاس DataTable
این کلاس همان طور که از اسم آن پیدا است نمایشگر جداول داخل پایگاه داده است. کلاس گفته شده دارای خواص (property) زیر می باشد که بیشتر آن ها به استثنای خاصیت PrimaryKey فقط قابل خواندن (read-only) هستند.
خاصیت
شرح
ChildRelations
مجموعه رابط های فرزندی (child relation) را بازمی گرداند.
Columns
مجموعه ستون هایی که متعلق به جدول مورد نظر می باشند را برمی گرداند.
Constraints
مجموعه محدودیت هایی (constraint) که در این جدول (در رابطه با بروز رسانی یا حذف مقدار در ستون های جدول) اعمال می شوند را می گیرد.
DataSet
DataSet والد را برمی گرداند.
DefaultView
این خاصیت یک DataView برمی گرداند که می توان با استفاده از آن یک DataTable را مرتب ساخت، فیلتر کرد یا در آن جستجو (search) انجام داد.
به عبارتی دیگر نما یا view سفارشی از جدول مورد نظر که می تواند شامل نمای فیلتر شده یا موقعیت مکان نمای موس باشد برمی گرداند.
ParentRelations
مجموعه (collection) رابط های پدری (parent relation) را برای این DataTable بازمی گرداند.
PrimaryKey
آرایه ای از ستون ها بر گردانده یا تنظیم می کند که به مثابه ی کلید اولیه برای جدول مورد نظر عمل می کند (بکار گرفته می شود).
Rows
مجموعه سطرهای متعلق به این جدول را بازمی گرداند.
جدول زیر متدهای پرکاربرد کلاس DataTable را برمی گرداند.
تابع
شرح
AcceptChanges
کلیه ی تغییراتی که از زمان آخرین فراخوانی متد AcceptChanges به این جدول وارد شده را پذیرفته و اعمال می کند.
Clear
این تابع تمامی داده ها را از جدول حذف می کند.
GetChanges
نسخه ای (کپی) از DataTable به همراه تمامی تغییرات وارد آمده از زمان فراخوانی متد AcceptChanges را برمی گرداند.
GetErrors
آرایه ای از سطرهایی که دارای خطا هستند را برمی گرداند.
ImportRows
یک سطر جدید را کپی کرده و در جدول مورد نظر جای گذاری می کند.
LoadDataRow
سطر مورد نظر را یافته، سپس آن را به روز رسانی می کند و در صورت نیافتن آن یک سطر جدید ایجاد می کند.
Merge
جدول جاری را با یک DataTable دیگر ادغام یا ترکیب می کند.
NewRow
این تابع یک DataRow جدید (مطابق با شِمای جدول) ایجاد می کند.
RejectChanges
تمامی تغییراتی که از زمان آخرین فراخوانی متد AcceptChanges یا بار گذاری جدول مورد نظر به آن اعمال شده را به حالت اولیه برمی گرداند (تغییرات وارد آمده را رد می کند).
Reset
این متد جدول مورد نظر را به حالت اولیه ی خود بازمی گرداند.
Select
این تابع آرایه ای از اشیا DataRow برمی گرداند.
کلاس DataRow
شی DataRow نشانگر سطر داخل جدول می باشد. خواص کلاس DataRow به ترتیب در جدول زیر فهرست شده.
خاصیت
شرح
HasErrors
مشخص می کند آیا در سطر مورد نظر خطا یا اشکالی وجود دارد یا خیر.
Items
داده های ذخیره شده داخل ستون معین را گرفته یا تنظیم می کند.
ItemArrays
تمامی مقادیر سطر مورد نظر را از طریق آرایه گرفته یا تنظیم می کند.
Table
جدول پدر را بازمی گرداند.
متدهای این کلاس به ترتیب زیر می باشند.
متد
شرح
AcceptChanges
کلیه ی تغییرات وارد آمده (به سطر مورد نظر) از زمان فراخوانی این متد را پذیرفته و به آن سطر اعمال می کند.
BeginEdit
این تابع عملیات ویرایش را آغاز می کند.
CancelEdit
این متد عملیات ویراست را لغو می کند.
Delete
DataRow را پاک می کند.
EndEdit
عملیات ویرایش را خاتمه می دهد.
GetChildRows
سطرهای فرزند یا زیرمجموعه ی سطر مورد نظر را بازمی گرداند.
GetParentRow
سطر پدر را برمی گرداند.
GetParentRows
سطرهای والد شی DataRow را برمی گرداند.
RejectChanges
کلیه ی تغییراتی که از زمان آخرین فراخوانی تابع AcceptChanges به سطر مورد نظر اعمال شده را رد می کند (پس می زند).
شی DataAdapter
شی نام برده به عنوان یک میانجی بین شی DataSet و پایگاه داده عمل می کند. DataAdapter به شی DataSet امکان می دهد به طور همزمان از چندین پایگاه داده یا دیگر منابع داده ای (data source) اطلاعات (داده) پذیرفته و در خود جای دهد.
شی DataReader
شی DataReader در واقع می تواند جایگزینی برای ترکیب دو شی بالا باشد. شی نام برده یک نوع دسترسی مبتنی بر اتصال (از طریق اتصال) به رکودهای داده (data records) موجود در پایگاه داده فراهمی می کند. این اشیا تنها ویژه ی دسترسی read-only (دسترسی که در آن تنها می توان داده را خواند و نه تغییر داد) تعبیه شده اند، مانند پر کردن لیست و قطع کردن اتصال به پایگاه داده.
شی های DbCommand و DbConnection
شی DbConnection نشانگر اتصال به منبع داده (data source) می باشد. اتصال (connection) می تواند بین command object های مختلف به اشتراک گذاشته شود.
شی DbCommand نشانگر دستور SQL یا رویه ی ذخیره شده (stored procedure) می باشد که به منظور بازیابی یا دستکاری و مدیریت داده به پایگاه داده فرستاده می شود.
مثال
در این مثال یک جدول ایجاد کرده و به داخل آن ستون، سطر، داده اضافه می کنیم، سپس با استفاده از شی GridView جدول را نمایش می دهیم.
Source file code
<%@ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”Ado_Example.aspx.cs” Inherits=”Ado_net.Ado_Example” %>
<!DOCTYPE html>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title>
Untitled Page
</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<asp:GridView ID=”GridView1″ runat=”server”>
</asp:GridView>
</div>
</form>
</body>
</html>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataSet ds = CreateDataSet();
GridView1.DataSource = ds.Tables[“Student”];
GridView1.DataBind();
}
}
private DataSet CreateDataSet()
{
//creating a DataSet object for tables
DataSet dataset = new DataSet();
// creating the student table
DataTable Students = CreateStudentTable();
dataset.Tables.Add(Students);
return dataset;
}
private DataTable CreateStudentTable()
{
DataTable Students = new DataTable(“Student”);
// adding columns
AddNewColumn(Students, “System.Int32”, “StudentID”);
AddNewColumn(Students, “System.String”, “StudentName”);
AddNewColumn(Students, “System.String”, “StudentCity”);
// adding rows
AddNewRow(Students, 1, “M H Kabir”, “Kolkata”);
AddNewRow(Students, 1, “Shreya Sharma”, “Delhi”);
AddNewRow(Students, 1, “Rini Mukherjee”, “Hyderabad”);
AddNewRow(Students, 1, “Sunil Dubey”, “Bikaner”);
AddNewRow(Students, 1, “Rajat Mishra”, “Patna”);
return Students;
}
private void AddNewColumn(DataTable table, string columnType, string columnName)
{
DataColumn column = table.Columns.Add(columnName, Type.GetType(columnType));
}
//adding data into the table
private void AddNewRow(DataTable table, int id, string name, string city)
{
DataRow newrow = table.NewRow();
newrow[“StudentID”] = id;
newrow[“StudentName”] = name;
newrow[“StudentCity”] = city;
table.Rows.Add(newrow);
}
پس از اجرای برنامه نتایج زیر را مشاهده می کنید.
اپلیکیشن ابتدا یک data set (مجموعه داده) ایجاد کرده، سپس با استفاده از تابع DataBind() (کنترل (GridView آن را به کنترل grid view متصل می کند.
تابع Createdataset() تابعی است که توسط کاربر تعریف (user-defined) شده. متد مزبور یک شی DataSet ایجاد کرده، سپس تابع CreateStudentTable() (که یک تابع user-defined دیگر می باشد) را فرامی خواند و از این طریق جدول مورد نیاز را ایجاد کرده و آن را به Tables collection مجموعه داده (data set) الحاق می کند.
متد CreateStudentTable() توابع ارائه شده توسط کاربر AddNewColumn() و AddNewRow() را فرا می خواند. دو تابع بیان شده ستون ها و سطرهای جدول مورد نظر را ساخته و داده های لازم را درون سطرها جای گذاری می کنند.
پس از اجرای صفحه، سطرهای جدول به صورت زیر برگردانده می شوند.