22-04-13, 07:01 PM
[b]
سنقوم في هذا الموضوع ببناء مشروع يتعامل مع تقنية Linq مع قواعد بيانات SQL يؤدي العمليات الاساسية التي تحتاجها كل برنامج قاعدة بيانات من (اضافة ,حذف ,تعديل ,بحث ,طباعة تقرير (سنستخدم تقارير مايكروسوفت Report.rdlc) واستعراض السجل السابق واللاحق) لكي يكون مرجعا لكل من يريد تعلم هذه التقنية واستخدامها مع قواعد بيانات SQL.
اولا : سنقوم بإنشاء قاعدة بيانات باسم std عن طريق برنامج الSQL Management Studio ومن ثم نقوم بإنشاء جدول باسم StdInfo
ونضيف اليه الحقول (ID, FName, DoB, Adress) ونضبط خصائص الحقول كما في الشكل الآتي:
مع جعل حقل الID مفتاح اساسي و ترقيم تلقائي من خاصية Identity column كما هو موضح في الصورة اعلاه.
ثانيا : نفتح مشروع جديد باسم Lint_to_SQL ونصمم الواجهة بالشكل الآتي:
ونقوم بضبط خصائص الادوات كما في الجدول الآتي:
ثالثا : من Project ثم Add New Item تظهر لنا الشكل الآتي:
نفعل كما في الصورة أي نختار LINQ to SQL Classes (هذا الClass وسيلة لربط قاعدة بيانات SQL بالبرنامج بتقنية الLINQ) ومن ثم نضغط على Add فتظهر لنا الشكل الآتي:
من الخصائص نغير الاسم الى Std_DBase
وبعد ذلك من الToolBox التي على اليسار نسحب أداة Class,لاحظ الشكل الآتي:
نغير اسم الClass (والتي يعادل جدول في قاعدة البيانات) الى StdInfo او أي اسم تختاره وفي حقل الSource نكتب اسم الجدول في قاعدة البيانات وهذا مهم جدا ,لاحظ الشكل اعلاه.
الان نضيف اربعة خصائص(Properties) (حقول) الى الClass كالآتي:
ونضبط خصائص الحقول كالآتي:
ملاحظة : هنا جعلت اسماء الحقول تتطابق مع اسماء الحقول في قاعدة البيانات لسهولة التعامل ,لكن تستطيع تغييرها كما تريدها انت.
اهم الملاحظات:
1- جعل خاصية الAuto Generated Value لحقل الID يساوي True لان الحقل الذي يقابله في قاعدة البيانات ترقيم تلقائي.
2- جعل خاصية الPrimary Key للID يساوي True.
3- أهم شيء هو تحديد الSource لكل الحقول ومعناه اسم الحقل في قاعدة البيانات.
4- تحديد الServer Data Type كما في الجدول في قاعدة البيانات (int, varchar, double , ………..)
5- تحديد الType للحقول التي أنشئناها في الClass بما يطابق نوع الحقول في الجدول في قاعدة البيانات.
رابعا : نضيف نموذج الى المشروع لعرض التقرير ونسميه Report Form ومن ثم نضيف اليه اداة Report Viewer بعد ذلك من Project ثم Add New Item نضيف تقرير فارغ الى المشروع ( لمعرفة المزيد عن تصميم التقارير راجع هذا الرابط : كيفية تمرير البيانات الى Microsoft Report عن طريق الباراميترات )
الان نضيف اربع باراميترات الى التقرير بأسماء (ID, Fname, Dob, Address) ,ايضا يمكنك مراجعة الرابط اعلاه لمعرفة المزيد.
ونصمم التقرير بهذا الشكل:
حيث(معلومات الطلبة والعناوين والخطوط الافقية في الPage header) والوقت والترقيم في الPage footer لكي تتكرر في كل الصفحات في حال كون التقرير يتكون اكثر من صفحة.
ونضيف الباراميترات التي انشأناها الى التقرير كما في الشكل اعلاه.
ملاحظة : يمكن اضافة الPage header and footer من شريط الTool bar Report.
ملاحظة : الPage Number والExecution Time تستطيع اضافتها من نافذة الReport Data من الBuilt-in-Fields.
الآن نأتي الى كتابة الاكواد ,وستكون بلغتي الC# والVB
اولا : نضيف مجالات الاسماء التالية:
C#
VB
ثانيا : المتغيرات العامة:
C#
VB
ثالثا : نضيف Class الى المشروع باسم Students لغرض تصفح المعلومات:
C#
VB
نحدد نص الاتصال لقاعدة البيانات في حدث الLoad للForm
C#
VB
اضافة البيانات:
C#
VB
حذف البيانات:
C#
VB
للموضوع تكملة ان شاءالله
[/b]
بسم الله الرحمن الرحيم
وصلى الله على محمد وآله الطاهرين
الســلام عليــكم ورحمــة اللــه وبركــاته
وصلى الله على محمد وآله الطاهرين
الســلام عليــكم ورحمــة اللــه وبركــاته
سنقوم في هذا الموضوع ببناء مشروع يتعامل مع تقنية Linq مع قواعد بيانات SQL يؤدي العمليات الاساسية التي تحتاجها كل برنامج قاعدة بيانات من (اضافة ,حذف ,تعديل ,بحث ,طباعة تقرير (سنستخدم تقارير مايكروسوفت Report.rdlc) واستعراض السجل السابق واللاحق) لكي يكون مرجعا لكل من يريد تعلم هذه التقنية واستخدامها مع قواعد بيانات SQL.
بسم الله نبدأ
اولا : سنقوم بإنشاء قاعدة بيانات باسم std عن طريق برنامج الSQL Management Studio ومن ثم نقوم بإنشاء جدول باسم StdInfo
ونضيف اليه الحقول (ID, FName, DoB, Adress) ونضبط خصائص الحقول كما في الشكل الآتي:
مع جعل حقل الID مفتاح اساسي و ترقيم تلقائي من خاصية Identity column كما هو موضح في الصورة اعلاه.
ثانيا : نفتح مشروع جديد باسم Lint_to_SQL ونصمم الواجهة بالشكل الآتي:
ونقوم بضبط خصائص الادوات كما في الجدول الآتي:
ثالثا : من Project ثم Add New Item تظهر لنا الشكل الآتي:
نفعل كما في الصورة أي نختار LINQ to SQL Classes (هذا الClass وسيلة لربط قاعدة بيانات SQL بالبرنامج بتقنية الLINQ) ومن ثم نضغط على Add فتظهر لنا الشكل الآتي:
من الخصائص نغير الاسم الى Std_DBase
وبعد ذلك من الToolBox التي على اليسار نسحب أداة Class,لاحظ الشكل الآتي:
نغير اسم الClass (والتي يعادل جدول في قاعدة البيانات) الى StdInfo او أي اسم تختاره وفي حقل الSource نكتب اسم الجدول في قاعدة البيانات وهذا مهم جدا ,لاحظ الشكل اعلاه.
الان نضيف اربعة خصائص(Properties) (حقول) الى الClass كالآتي:
ونضبط خصائص الحقول كالآتي:
ملاحظة : هنا جعلت اسماء الحقول تتطابق مع اسماء الحقول في قاعدة البيانات لسهولة التعامل ,لكن تستطيع تغييرها كما تريدها انت.
اهم الملاحظات:
1- جعل خاصية الAuto Generated Value لحقل الID يساوي True لان الحقل الذي يقابله في قاعدة البيانات ترقيم تلقائي.
2- جعل خاصية الPrimary Key للID يساوي True.
3- أهم شيء هو تحديد الSource لكل الحقول ومعناه اسم الحقل في قاعدة البيانات.
4- تحديد الServer Data Type كما في الجدول في قاعدة البيانات (int, varchar, double , ………..)
5- تحديد الType للحقول التي أنشئناها في الClass بما يطابق نوع الحقول في الجدول في قاعدة البيانات.
رابعا : نضيف نموذج الى المشروع لعرض التقرير ونسميه Report Form ومن ثم نضيف اليه اداة Report Viewer بعد ذلك من Project ثم Add New Item نضيف تقرير فارغ الى المشروع ( لمعرفة المزيد عن تصميم التقارير راجع هذا الرابط : كيفية تمرير البيانات الى Microsoft Report عن طريق الباراميترات )
الان نضيف اربع باراميترات الى التقرير بأسماء (ID, Fname, Dob, Address) ,ايضا يمكنك مراجعة الرابط اعلاه لمعرفة المزيد.
ونصمم التقرير بهذا الشكل:
حيث(معلومات الطلبة والعناوين والخطوط الافقية في الPage header) والوقت والترقيم في الPage footer لكي تتكرر في كل الصفحات في حال كون التقرير يتكون اكثر من صفحة.
ونضيف الباراميترات التي انشأناها الى التقرير كما في الشكل اعلاه.
ملاحظة : يمكن اضافة الPage header and footer من شريط الTool bar Report.
ملاحظة : الPage Number والExecution Time تستطيع اضافتها من نافذة الReport Data من الBuilt-in-Fields.
الآن نأتي الى كتابة الاكواد ,وستكون بلغتي الC# والVB
اولا : نضيف مجالات الاسماء التالية:
C#
PHP كود :
using System.Data.SqlClient;
using Microsoft.Reporting.WinForms;
using System.IO;
using System.Collections;
VB
PHP كود :
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WinForms
Imports System.IO
Imports System.Collections
ثانيا : المتغيرات العامة:
C#
PHP كود :
// نص الاتصال بقاعدة البيانات
private string constr = @"Data Source=.\SQLEXPRESS;Initial Catalog=std;Integrated Security=True;Connect Timeout=30;User Instance=false";
//linqمن قاعدة البيانات التي تتعامل مع تقنية ال instanceانشاء
private Std_DBase dbo;
// لتضم بيانات الطلاب اثناء تحميلها من الجدول في قاعدة البيانات Studentsانشاء قائمة من نوع
private List<Students> student;
private int i
, pos = 0 // موقع السجل (للتنقل بين السجلات)
, start = 0 // بداية الصفحة من السجل الاول
, end = 5; // نهاية الصفحة (هنا حددنا 5 سجلات فقط للصفحة اثاء عرض السجلات في ال DataGrudView)
private ReportDataSource rep_source; // لتحديد مصدر البيانات للتقرير
private ReportParameter[] rep_param; // مصفوفة من الباراميترات التي ستمرر الى التقرير
VB
PHP كود :
' نص الاتصال بقاعدة البيانات
Private constr As String = "Data Source=.\SQLEXPRESS;Initial Catalog=std;Integrated Security=True;Connect Timeout=30;User Instance=false"
'linqمن قاعدة البيانات التي تتعامل مع تقنية ال instanceانشاء
Private dbo As Std_DBase
' لتضم بيانات الطلاب اثناء تحميلها من الجدول في قاعدة البيانات Studentsانشاء قائمة من نوع
Private student As List(Of Students)
Private i As Integer,
pos As Integer = 0 ' موقع السجل (للتنقل بين السجلات)
, start As Integer = 0 ' بداية الصفحة من السجل الاول
, endd As Integer = 5 ' نهاية الصفحة (هنا حددنا 5 سجلات فقط للصفحة اثاء عرض السجلات في ال DataGrudView)
Private rep_source As ReportDataSource ' لتحديد مصدر البيانات للتقرير
Private rep_param As ReportParameter() ' مصفوفة من الباراميترات التي ستمرر الى التقرير
ثالثا : نضيف Class الى المشروع باسم Students لغرض تصفح المعلومات:
C#
PHP كود :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Linq_to_Sql
{
public class Students
{
private int id;
private string fname, address;
private DateTime Dob;// (Date of Birth) تاريخ الولادة
public int ID
{
set { id = value; }
get { return id; }
}
public string Fname
{
set { fname = value; }
get { return fname; }
}
public DateTime DoB
{
set { Dob = value; }
get { return Dob; }
}
public string Address
{
set { address = value; }
get { return address; }
}
}//Class End
}//Namespace End
VB
PHP كود :
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Namespace Linq_to_Sql
Public Class Students
Private m_id As Integer
Private m_fname As String, m_address As String
Private m_Dob As DateTime ' (Date of Birth) تاريخ الولادة
Public Property ID() As Integer
Get
Return m_id
End Get
Set
m_id = value
End Set
End Property
Public Property Fname() As String
Get
Return m_fname
End Get
Set
m_fname = value
End Set
End Property
Public Property DoB() As DateTime
Get
Return m_Dob
End Get
Set
m_Dob = value
End Set
End Property
Public Property Address() As String
Get
Return m_address
End Get
Set
m_address = value
End Set
End Property
End Class
'Class End
End Namespace
'Namespace End
نحدد نص الاتصال لقاعدة البيانات في حدث الLoad للForm
C#
PHP كود :
private void Form1_Load(object sender, EventArgs e)
{
dbo = new Std_DBase(constr); //Linqتحديد نص الاتصال لقاعدة البيانات التي تتعامل مع تقنية
}
VB
PHP كود :
Private Sub Form1_Load(sender As Object, e As EventArgs)
dbo = New Std_DBase(constr) 'Linqتحديد نص الاتصال لقاعدة البيانات التي تتعامل مع تقنية
End Sub
اضافة البيانات:
C#
PHP كود :
private void insert_btn_Click(object sender, EventArgs e)
{
//Insert Data
StdInfo std1 = new StdInfo(); //DataClasses1.dbml الذي اضفناه الى نموذج ال Classمن ال Instanceانشاء
// اسناد المعلومات الى خصائص الفئة ليتم حفظها في قاعدة البيانات
std1.FName = name_txt.Text;
std1.DoB = DateTime.Parse (dob_txt.Text);
std1.Address = addr_txt.Text;
dbo.StdInfos.InsertOnSubmit(std1); // اضافة المعلومات الى الجدول
dbo.SubmitChanges(); // تأكيد التغييرات على الجدول
Enabled_btns(false); // دالة لتفعيل او الغاء الاضافة سنأتي لها لاحقا
pos = dbo.StdInfos.Count() - 1; // تحديد اخر موقع لاخر سجل مضاف الى قاعدة البيانات
load_btn_Click(null, null); // زر عرض المعلومات في الحقول التي على النموذج
}
VB
PHP كود :
Private Sub insert_btn_Click(sender As Object, e As EventArgs)
'Insert Data
Dim std1 As New StdInfo() 'DataClasses1.dbml الذي اضفناه الى نموذج ال Classمن ال Instanceانشاء
' اسناد المعلومات الى خصائص الفئة ليتم حفظها في قاعدة البيانات
std1.FName = name_txt.Text
std1.DoB = DateTime.Parse(dob_txt.Text)
std1.Address = addr_txt.Text
dbo.StdInfos.InsertOnSubmit(std1) ' اضافة المعلومات الى الجدول
dbo.SubmitChanges() ' تأكيد التغييرات على الجدول
Enabled_btns(False) ' دالة لتفعيل او الغاء الاضافة سنأتي لها لاحقا
pos = dbo.StdInfos.Count() - 1 ' تحديد اخر موقع لاخر سجل مضاف الى قاعدة البيانات
load_btn_Click(Nothing, Nothing) ' زر عرض المعلومات في الحقول التي على النموذج
End Sub
حذف البيانات:
C#
PHP كود :
private void delete_btn_Click(object sender, EventArgs e)
{
//Delete Data
if (dbo.StdInfos.Count() != 0)
{
// لحذف السجل حسب التسلسل Linqعبارة
StdInfo del =
(from StdInfo s in dbo.StdInfos
where s.ID == int.Parse(id_txt.Text)
select s)
.Single(); // دالة تحدد فقط سجل واحد من المطابقة
// or
//std s = dclass.GetTable<std>().Where(c => (c.FName == name)).SingleOrDefault<std>();
dbo.StdInfos.DeleteOnSubmit(del); // حذف السجل المحدد
dbo.SubmitChanges(); // تأكيد التغييرات على الجدول
pos = dbo.StdInfos.Count() - 1; // تحديد اخر موقع لأخر سجل مضاف الى قاعدة البيانات
// هذا الشرط لتجنب وصول متغير الموقع الى السالب عند حذف اخر سجل من الجدول
if (pos < 0)
pos = 0;
load_btn_Click(null, null);
}
}
VB
PHP كود :
Private Sub delete_btn_Click(sender As Object, e As EventArgs)
'Delete Data
If dbo.StdInfos.Count() <> 0 Then
' لحذف السجل حسب التسلسل Linqعبارة
Dim del As StdInfo = (From s In dbo.StdInfos Where s.ID = Integer.Parse(id_txt.Text)s)
.[Single]() ' دالة تحدد فقط سجل واحد من المطابقة
' or
'std s = dclass.GetTable<std>().Where(c => (c.FName == name)).SingleOrDefault<std>();
dbo.StdInfos.DeleteOnSubmit(del) ' حذف السجل المحدد
dbo.SubmitChanges() ' تأكيد التغييرات على الجدول
pos = dbo.StdInfos.Count() - 1 ' تحديد اخر موقع لأخر سجل مضاف الى قاعدة البيانات
' هذا الشرط لتجنب وصول متغير الموقع الى السالب عند حذف اخر سجل من الجدول
If pos < 0 Then
pos = 0
End If
load_btn_Click(Nothing, Nothing)
End If
End Sub
للموضوع تكملة ان شاءالله
[/b]