مقدمة في 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.
يتعامل هذا النوع مع قواعد البيانات من نوع OLE DB. يتم استخدام هذه للوصول إلى كائنات COM وDBMS التي لا تحتوي على موفر بيانات .NET محدد. يستخدم System.Data.OleDb namespace.
يتعامل هذا النوع مع قواعد البيانات من نوع DBMS يتعامل هذا النوع مع System.Data.Odbc namespace عادةً. لا يوجد له موفر بيانات .NET مخصص.
يتعامل هذا النوع مع قواعد البيانات من نوع 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 لإدارة قاعدة البيانات. وهاي هي مواضيعنا في الدروس القادمة
اترك تعليقك