التنبيهات التالية ظهرت :
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (Linux)
File Line Function
/showthread.php 864 errorHandler->error



تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
LinqToSQL اضافة حذف تعديل بحث
#1
[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<Studentsstudent;
  
 private 
int i
     
pos // موقع السجل (للتنقل بين السجلات)
     
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 '  بداية الصفحة من السجل الاول
        , 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 fnameaddress;
        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 Stringm_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 senderEventArgs e)
{
    
dbo = new Std_DBase(constr); //Linqتحديد نص الاتصال لقاعدة البيانات التي تتعامل مع تقنية 


VB
PHP كود :
Private Sub Form1_Load(sender As ObjectAs EventArgs)
            
dbo = New Std_DBase(constr'Linqتحديد نص الاتصال لقاعدة البيانات التي تتعامل مع تقنية
        End Sub 

اضافة البيانات:

C#
PHP كود :
private void insert_btn_Click(object senderEventArgs 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(nullnull); // زر عرض المعلومات في الحقول التي على النموذج
        


VB
PHP كود :
Private Sub insert_btn_Click(sender As ObjectAs 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() - ' تحديد اخر موقع لاخر سجل مضاف الى قاعدة البيانات
            
            load_btn_Click(Nothing, Nothing) ' 
زر عرض المعلومات في الحقول التي على النموذج
            
        End Sub 

حذف البيانات:

C#
PHP كود :
private void delete_btn_Click(object senderEventArgs 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(nullnull);
            }
        } 

VB
PHP كود :
Private Sub delete_btn_Click(sender As ObjectAs 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]
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو


الردود في هذا الموضوع
LinqToSQL اضافة حذف تعديل بحث - بواسطة Sajad - 22-04-13, 07:01 PM
LinqToSQL اضافة حذف تعديل بحث - بواسطة Sajad - 22-04-13, 09:46 PM
LinqToSQL اضافة حذف تعديل بحث - بواسطة Sajad - 23-04-13, 02:36 PM
LinqToSQL اضافة حذف تعديل بحث - بواسطة Sajad - 25-06-13, 05:20 PM
LinqToSQL اضافة حذف تعديل بحث - بواسطة Sajad - 31-07-13, 10:15 PM
LinqToSQL اضافة حذف تعديل بحث - بواسطة Abu Ehab - 31-07-13, 10:42 PM
LinqToSQL اضافة حذف تعديل بحث - بواسطة Sajad - 31-07-13, 11:03 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [نقاش] LinqToSql Or Entity Framework حريف برمجة 3 8,189 30-11-17, 05:01 PM
آخر رد: حريف برمجة
  [مثال] LinqToSql Using C# in WPF Sajad 13 8,721 04-10-15, 07:32 AM
آخر رد: أبو عمر

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم