مقدمة في ADO.NET

-

يحدد  ASP.NET CORE Framework عددًا من namespaces للتفاعل مع Relational Database System  مثل Microsoft SQL Server و Oracle و MySQL وما إلى ذلك. بشكل جماعي ، تُعرف namespaces  هذه باسم ADO.NET.

في هذا الدرس، بنتعلم كيفية العمل مع ADO.NET للتواصل مع قاعدة بيانات SQL Server. ستنعلم أولاً كيفية إنشاء connections وفتحها لاسترداد البيانات، ثم الانتقال إلى إدراج البيانات وتحديثها وحذفها، متبوعًا بفحص موضوع معاملات database transactions.

أخيرًا، ستستخدم ميزة SQL Server’s bulk copy   من ADO.NET، لإدراج قائمة من السجلات في قاعدة البيانات.

تمام في ADO.NET يمكن استخدام أسلوبين للاتصال بقاعدة البيانات، يُعرفان أيضًا ب environments، وهما:

  • البيئة المتصلة Connected Environment
  • البيئة غير المتصلة Disconnected Environment
وفيما يلي بنحكي بالتفصيل عن كل نوع :

 البيئة المتصلة Connected Environment

تعني Connected Environment  أن التطبيق يبقى متصلاً بقاعدة البيانات طوال العملية. ويتم التعامل مع قاعدة البيانات باستخدام الاوامر
connection
command
data reader objects

البيئة غير المتصلة Disconnected Environment

في Disconnected Environment  يتم ارجاع البيانات من قواعد البيانات وحفظها بشكل مؤقت في DataTables و DataSets ليتم معالجتها ثم عكسها ومطابقتها لاحقًا مع قاعدة البيانات. وتعتبر هذه الطريقة client-side copy of external data ، لاجتياز المحتويات ومعالجتها.

يمكن استخدام Connected and Disconnected لإنشاء البيانات وقراءتها وتحديثها وحذفها في قواعد البيانات.

ADO.NET Data Providers

يتم استخدام ADO.NET Data Provider للاتصال بقواعد البيانات وتنفيذ الأوامر executing commands  ثم الحصول على النتائج. يدعم ADO.NET العديد من data providers.
Data Providers الأربعة الأكثر شيوعًا في ADO.NET هم:
  • Data Provider for SQL Server 
يتعامل هذا النوع مع قواعد البيانات من نوع Microsoft SQL Server. يستخدم System.Data.SqlClientnamespace.

  • Data Provider for OLE DB 
يتعامل هذا النوع مع قواعد البيانات من نوع OLE DB. يتم استخدام هذه للوصول إلى كائنات COM وDBMS التي لا تحتوي على موفر بيانات .NET محدد. يستخدم System.Data.OleDb namespace.

  • Data Provider for ODBC
يتعامل هذا النوع مع قواعد البيانات من نوع DBMS يتعامل هذا النوع مع System.Data.Odbc namespace عادةً. لا يوجد له موفر بيانات .NET مخصص.

  • Data Provider for Oracle
يتعامل هذا النوع مع قواعد البيانات من نوع Oracle. يستخدم System.Data.OracleClient namespace.

المكونات الأساسية ل ADO.NET Data Providers:


Object
Description
Connection

يتم استخدامه لفتح واغلاق الاتصال بقاعدة البيانات.

 Base class لجميع Connection objects هي class DbConnection.

Command

يستخدم لتنفيذ أوامر SQL على قاعدة بيانات

 base class لجميع Command objects هي class DbCommand  

DataReader

يستخدم للقراءة فقط من قاعدة البيانات.

base class ل DataReader objects هي DbDataReader class

DataAdapter

يستخدم لتعبئة dataset  او datatable بالبيانات من قاعدة البيانات.

base class هي DbDataAdapter

Parameter

يستخدم parameter داخل Query لارسال قيم معينة الى قواعد البيانات

 base class ل parameterized queryهي DbParameter.

Transaction

العمليات   transaction على

database. base class هي DbTransaction.

لاحظ أن الأسماء المحددة لهذه base classes ستختلف بين Data Providers.
مثال - في حالة استخدام Connection objects ،سيكون استخدام SqlConnection مقابل OdbcConnection ، يتم اشتقاق كل class من نفس base class  في  DbConnection.
Important ADO.NET Namespaces:
يتم تمثيل الجزء الأكبر من ADO.NET بواسطة core assembly يسمى System.Data.dll.

فيما يلي توضيح لبعض Namespaces 


Namespace
الوصف
System.Data
تحدد namespace هذه أنواع ADO.NET الأساسية التي يستخدمها جميع Data Providers. وممكن نعتبرو القاسم المشترك الأدنى ويحتوي على أنواع مشتركة بين كافة ADO.NET data providers. لا يمكنك إنشاء أي تطبيقات ADO.NET دون تحديد namespace  هذه في التطبيقات الي بتتعامل مع قواعد البيانات.
System.Data.SqlClient
 هذه  Namespace تستخدم مع NET Data Provider for SQL Server والي من خلالها يمكن الوصول بسهولة إلى SqlConnection و SqlCommand وفئات SQL الثانيه.
System.Data.Sql
تحتوي namespace هذه على أنواع تسمح لك باكتشاف SQL Server instances Server المثبتة على الشبكة المحلية الحالية.
مثل ما تعلمنا يوجد عددًا كبيرًا من ADO.NET data providers ، في هذا الدرس بنتعلم فقط :
 Microsoft SQL Server data provider (System.Data.SqlClient.dll)
تمام وحكينا ان هذاprovider يسمح لنا بالاتصال بـ Microsoft SQL Server ، بما في ذلك SQL Server Express و LocalDb.
في نوع ثاني اسمو Entity Framework Core هو Object/Relational Object/Relational Mapping (O/RM)  طريقة ثانية للقيام بالعمليات على قاعدة البيانات. بنتعلمها في دروس أخرى لاحقا.
يمكن من خلال ADO.NET التعامل مع أنواع مختلفه من قواعد البيانات ، الطريقة هي نفسها تقريبا باستثناء تغيير بعض الأكواد. مشان هيك خلونا نبدأ نفهم كيف نستخدم ADO.Net للتعامل مع قواعد البيانات.

الاتصال ب SQL Server
هناك طريقتان للاتصال بـ SQL Server. ويمكن استخدام أي منهم،هذه الطرق هي:
  • الاتصال SQL Server Object Explorer  من خلال Visual Studio
  • الاتصال ب SQL Server Object Explorer من خلال  SQL Server Management Studio (SSMS).

تمام نشوف كيف نسخدم الطريقتين
اولال الاتصال عن طريق Visual Studio
يمكن فتح SQL Server Object Explorer  من خلال  
View ➤ SQL Server Object Explorer


بتم بعد هيك فتح نافذة SQL Server Object Explorer  ،بعدها انقر بزر الماوس الأيمن فوق SQL Server وحدد Add SQL Server.


بعد ذلك، ستفتح نافذة الاتصال Connect window. في هذه النافذة، حدد علامة التبويب Browse  ثم انقر فوق Local node لفتحها.
داخل هذه node، حدد اسم السيرفر الخاص بك وهنا سيكون DESKTOP-H4I6449MYSERVER. بعد تحديده، ستلاحظ أن حقل Server Name: في نفس النافذة يحتوي الآن على قيمة
DESKTOP-H4I6449MYSERVER.
اخترنا Authentication  من النوع Windows Authentication
 
الآن عليك النقر فوق الزر Connect  للاتصال بـ SQL Server. انظر الصورة أدناه:

في غضون ثوانٍ قليلة، سيتم  الاتصال مع SQL Server  وجاهزًا للاستخدام.


من خلال هذه الشاشة يمكن الوصول الى قواعد البيانات بسهولة.

الطريقة الثانية الاتصال عن طريق SQL Server Management Studio (SSMS)
يمكن الاتصال مع SQL Server من خلال SQL Server Management Studio (SSMS) وحتي نعمل هاذ الاشي نتبع الخطوات:

أولاً افتح SSMS المثبت على جهاز الكمبيوتر.  بالنقر في مربع البحث داخل windows وكتابة الامر SSMS انظر الصورة في الأسفل.


عند بدء البرنامج بتفتح نافذه Connect to Server window. في هذه النافذة، المطلوب نختار اسم السيرفر الي بنشتغل عليه، تأكد أيضًا من تحديد Server type  ك Database Engine ، وتحديد Authentication  ك Windows Authentication. هذا موضح في الصورة أدناه:


بعد ذلك، انقر فوق الزر "Connect" للاتصال بـ SQL Server. 
تمام الان بعد الاتصال بنجاح بنكون جاهزين للتعامل مع قواعد البيانات
للمزيد حول تثبيتSQL Server and SSMS راجع الدرس الخاص بذلك من هنا 
Create Data Base

لقد انشاءنا في الدرس السابق قاعدة بيانات باسم StudentsAcademy، سنقوم بتطبيق بعض الأمثلة على الجداول التي تم انشاءاها. حيث قمنا بإنشاء مجموعة من الجداول وهي: 
  • Countries
  • Courses
  • Genders
  • Students
بالرجوع الى الدرس السابق يمكن معرفة المزيد حول تفاصل هذه الجداول.

سنوضح هنا بعض مكونات الجدول Students من خلال الكود الخاص بإنشائه: 

USE [StudentsAcademy]
GO
/****** Object:  Table [dbo].[Students]    Script Date: 14/09/2021 23:37:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Students](
[StudentId] [int] IDENTITY(1,1) NOT NULL,
[CustomerNo] [nvarchar](20) NOT NULL,
[FullName] [nvarchar](200) NOT NULL,
[Birthday] [datetime] NOT NULL,
[Gender] [int] NOT NULL,
[Nationality] [int] NOT NULL,
[Address] [nvarchar](500) NOT NULL,
[UserName] [nvarchar](10) NOT NULL,
[Password] [nvarchar](200) NOT NULL,
[Email] [nvarchar](50) NOT NULL,
[Mobile] [nvarchar](10) NOT NULL,
[Note] [ntext] NULL,
[CreatedDate] [datetime] NULL,
 CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED 
(
[StudentId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
طيب مثل ما شفنا انشأنا 12 عمود في Students table وهي
 StudentId, CustomerNo, FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note. 
كل عمود منها له نوع بيانات بجواره مباشرة. امثلة على هذه الاعمده

اسم العمود
نوع البيانات
الوصف
StudentId
Int
for integer values like 1,2,100
CustomerNo
nvarchar(20)
for strings up to 20 characters in length
FullName
nvarchar(200)
for strings up to 200 characters in length
Birthday
datetime
for date values like 11-20-2018
Gender
Int
for integer values like 1,2,3
لاحظ ان بعض هذه الأعمدة تحتوي NOT NULL وبعضها لا.
المقصود بذلك هو: في حال إضافة NOT NULL  فهذا يعني اجباري يتم ادخال قيم في هذا العمود واكيد لازم تكون من النوع المحدد. 
لاحظ الصورة في الأسفل: حيث جميع الحقول اجباريه باستثناء Note


تمام، لاحظ كمان ان تم تعريف الحقل StudentId على انه primary key  باستخدام الكلمة الأساسية PRIMARY KEY. هذا يعني أن جميع StudentId ستكون فريدة ولا يمكن أن يكون هناك أكثر من رقم StudentId في الجدول بنفس القيمة. و اكيد PRIMARY KEY مهم جدا في الجداول لان الصح يكون لكل سجل في الجدول رقم فريد خاص به، حتى نقدر نتعامل مع هذا السجل.
استخدامنا كمان الكلمة IDENTITY(1,1) لعمل ميزة الزيادة تلقائية. لذا فإن قيمة البداية لعمود StudentId هي 1، وستزداد بمقدار 1 لكل سجل جديد.
تمام نشوف تعريف العمود CreatedDate ( الكود اسفل هو الكود الخاص به):
[CreatedDate] [datetime] NOT NULL DEFAULT GETDATE()
كمان اضفنا الكود التالي  ()DEFAULT GETDATE  والسبب تحديد قيمة افتراضية لهذا الحقل وهي التاريخ الحالي في MSSQL نستخدم الامر ()GETDATE للحصول على التاريخ الحالي، حيث سيتم إضافة التاريخ الحالي بتنسيق YYYY-MM-DD .

تمام الان احنا جاهزين لإنشاء أكواد ADO.NET لإدارة قاعدة البيانات. وهاي هي مواضيعنا في الدروس القادمة