تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
إنشاء مشروع باستخدام sql server و linq وتقارير crystal report
#11
learning.net كتب :اخى المبدع الاستاذ ربيع
بما اننا اصدقاء فاسمح لى ان احكى لاعضاء المنتدى قصة قاعدة البيانات التى صنعتها لى.....
كنت اعمل على مشروع وكان استاذ ربيع يساعدنى فى عمله.... فصنع لى مثال ... كل ما ارسله لى هو المف التنفيذى (exe) لايوجد به اى شيئ اخر
والمشروع كان من المفترض ان يكون به قاعدة بيانات.
ففتحت الملف واذا بى اجد ان به قاعدة بيانات واستطيع ان اضيف واعدل واحذف واحفظ فى قاعدة البانات كما اريد بمنتهى السهوله والسرعه.
فأخذت ابحث كثيراّ عن مكان قاعدة البيانات فى جهازى فلم اجدها...فكدت اجن(كنت لسه اهبل Big Grin)
فطلبت منه السورس كود فاعطانى اياه فاذا بى اجد ان جميع اكواد انشاء قاعدة البانات والحفظ والتعديل والحذف بضع اسطر لاتتعدى اصابع اليد الواحده.
ومنذ ذلك اليوم وانا اعشق طريقة الاستاذ ربيع فى التعامل مع قواعد البانات.
اما بالنسبه الى linq فانا اعتقد ان اى مبرمج يريد ان يكون محترف فلابد ان يتعلم التعامل مع وان يتقنها لانها (فى وجة نظرى المتواضعه طبعاّ) من افضل الطرق للتعامل مع قواعد البيانات والمصفوفات والكائنات و...و...
فهى تختصر الاكواد بطريقه مدهشه وتسهل البرمجه لمن يريد ان يكتب برنامج بإحترافيه وسهوله وسرعه.

بارك الله فيك ياربيع وذادك من علمه... والى الأمام دائماّ.

اهلا ومرحبا بك اخي العزيز ابو عمر!
بارك الله فيك على الاضافة والتوضيح بخصوص هذه التقنية، وزادك الله من العلم أيضا.
الرد }}}
تم الشكر بواسطة:
#12
بارك الله فيك اخي الكريم
الرد }}}
تم الشكر بواسطة:
#13
وانت كذلك
الرد }}}
تم الشكر بواسطة:
#14
[COLOR="#A52A2A"]السلام عليكم

بارك الله فيك اخي الكريم موضوع جميل

بالتوفيق ان شاءالله[/COLOR]
الرد }}}
تم الشكر بواسطة:
#15
وانت كذلك
الرد }}}
تم الشكر بواسطة:
#16
الآن لننشئ نموذج إضافة مستخدم جديد، وليكن اسمه AddNewUser، وخصائصه كما خصائص نموذج تسجيل الدخول، الأدوات التي سندرجها عليه هي: أداتي Label وأداتي TextBox وأداتي CheckBox و Button، نضبط مواقعهن، والخصائص كما يلي:

[TABLE="class: grid, width: 500, align: right"]
[TR]
[TD]الأداة
[/TD]
[TD]خاصية الاسم Name[/TD]
[TD]خاصية النص Text[/TD]
[/TR]
[TR]
[TD]Label1[/TD]
[TD][/TD]
[TD]اسم المستخدم[/TD]
[/TR]
[TR]
[TD]Label2[/TD]
[TD][/TD]
[TD]كلمة المرور[/TD]
[/TR]
[TR]
[TD]textBox1[/TD]
[TD]unbox[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]textBox2[/TD]
[TD]pasbox[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]checkBox1[/TD]
[TD]admin[/TD]
[TD]مدير[/TD]
[/TR]
[TR]
[TD]checkBox1[/TD]
[TD]active[/TD]
[TD]مفعل[/TD]
[/TR]
[TR]
[TD]button1[/TD]
[TD][/TD]
[TD]حفظ[/TD]
[/TR]
[/TABLE]

داخل الحدث الخاص بضغط الزر إضافة، نكتب الكود التالي:
:#C
كود :
[align=left]if (String.IsNullOrEmpty(unbox.Text.Trim()) || String.IsNullOrEmpty(pasbox.Text.Trim()))
{ MessageBox.Show("يجب إكمال البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; }

DB.PhoneBookDB db = new DB.PhoneBookDB();

try
{
    var users = from u in db.Users
   where u.Username == unbox.Text.Trim()
   select u;

    if (users.Count() > 0)
    {
        MessageBox.Show("لقد أدخلت اسم موجود، قم باختيار اسم آخر", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }
}
catch { return; }

DB.Users user = new DB.Users();
user.Username = unbox.Text.Trim();
user.Password = pasbox.Text.Trim();
user.Admin = admin.Checked;
user.Active = active.Checked;

db.Users.InsertOnSubmit(user);

try
{
    db.SubmitChanges();
    MessageBox.Show("تم إضافة المستخدم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

    unbox.Text = String.Empty;
    pasbox.Text = String.Empty;
    unbox.Focus();
}
catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); }
[/align]
:VB
كود :
[align=left]If String.IsNullOrEmpty(unbox.Text.Trim()) OrElse String.IsNullOrEmpty(pasbox.Text.Trim()) Then
    MessageBox.Show("يجب إكمال البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    Return
End If

Dim db As New DB.PhoneBookDB()

Try
    Dim users = From u In db.Users
       Where u.Username = unbox.Text.Trim()
       Select u

    If users.Count() > 0 Then
MessageBox.Show("لقد أدخلت اسم موجود، قم باختيار اسم آخر", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)
Return
    End If

Catch
    Exit Sub
End Try

Dim user As New DB.Users()
user.Username = unbox.Text.Trim()
user.Password = pasbox.Text.Trim()
user.Admin = admin.Checked
user.Active = active.Checked

db.Users.InsertOnSubmit(user)

Try
    db.SubmitChanges()
    MessageBox.Show("تم إضافة المستخدم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

    unbox.Text = String.Empty
    pasbox.Text = String.Empty
    unbox.Focus()

Catch ex As Exception
    MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
[/align]
الآن نضيف نموذج جديد للمشروع ونسميه EditUser، نضبط خصائصه كما نموذج تسجيل الدخول، ونلقي عليه أداة Labe وأداة ComboBox وأداتي CheckBox وأداتين Button، نضبط مواقع الأدوات، والخصائص نجعلها كما يلي:

[TABLE="class: grid, width: 500, align: right"]
[TR]
[TD]الأداة
[/TD]
[TD]خاصية الاسم Name[/TD]
[TD]خاصية النص Text[/TD]
[/TR]
[TR]
[TD]Label1[/TD]
[TD][/TD]
[TD]اسم المستخدم[/TD]
[/TR]
[TR]
[TD]comboBox1[/TD]
[TD]unlist[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]checkBox1[/TD]
[TD]admin[/TD]
[TD]مدير[/TD]
[/TR]
[TR]
[TD]checkBox1[/TD]
[TD]active[/TD]
[TD]مفعل[/TD]
[/TR]
[TR]
[TD]button1[/TD]
[TD][/TD]
[TD]حفظ[/TD]
[/TR]
[/TABLE]


أداة الـ comboBox1 نعدل فيها خاصيتي:
AutoCompleteMode = SuggestAppend
AutoCompleteSource = ListItems
المتغير المعتاد: (عام خارج أي إجراء)
:#C
كود :
[align=left]private DB.PhoneBookDB db = new DB.PhoneBookDB();
[/align]
:VB
كود :
[align=left]Private db As New DB.PhoneBookDB()
[/align]
ثم ننتقل لحدث تحميل النموذج، لنكتب:
:#C
كود :
[align=left]try
{
    var users = from u in db.Users
    select u;

    unlist.DataSource = users;
    unlist.DisplayMember = "Username";

    unlist_SelectedIndexChanged(sender, e);
}
catch { }
[/align]
:VB
كود :
[align=left]Try
    Dim users = From u In db.Users
    Select u

    unlist.DataSource = users
    unlist.DisplayMember = "Username"

    unlist_SelectedIndexChanged(sender, e)

Catch

End Try
[/align]
قمنا بجلب بيانات المستخدمين، من خلال جملة التحديد (والتي تم شرحها فيما سبق)، ثم اسندنا البيانات للقائمة من خلال خاصية DataSource، ثم استعرضنا فيها اسماء المستخدمين (لأنها تحتوي على اكثر من صف، نريد استعراض الاسم فقط)، من خلال الخاصية DisplayMember.

في حدث SelectedIndexChanged التابع للأداة unlist:
:#C
كود :
[align=left]            try
            {
                DB.Users user = (DB.Users)unlist.SelectedValue;
                admin.Checked = user.Admin;
                active.Checked = user.Active;
            }
            catch { }
[/align]
:VB
كود :
[align=left]        Try
            Dim user As DB.Users = CType(unlist.SelectedValue, DB.Users)
            admin.Checked = user.Admin
            active.Checked = user.Active

        Catch

        End Try
[/align]
وفي حدث زر الحفظ:
:#C
كود :
[align=left]             try
            {
                DB.Users user = (DB.Users)unlist.SelectedValue;
                user.Admin = admin.Checked;
                user.Active = active.Checked;

                db.SubmitChanges();
                MessageBox.Show("تم تحديث البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch { }
[/align]
:VB
كود :
[align=left]         Try
            Dim user As DB.Users = CType(unlist.SelectedValue, DB.Users)
            user.Admin = admin.Checked
            user.Active = active.Checked

            db.SubmitChanges()
            MessageBox.Show("تم تحديث البيانات", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

        Catch

        End Try
[/align]
السطر الأول عرفنا متغير من الفئة Users، وقد أخذنا القيمة من قائمة الأسماء، والتي تحتوي على البيانات التي أدرجناها في حدث التحميل، وخاصية الـ SelectedValue التابعة للأداة، ما هي إلا صف يمثل البيانات.
في حدث زر الحذف:
:#C
كود :
[align=left]            if (MessageBox.Show("هل أنت متأكد", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;

            try
            {
                db.Users.DeleteOnSubmit((DB.Users)unlist.SelectedValue);
                db.SubmitChanges();

                MessageBox.Show("تم حذف المستخدم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch { }
[/align]
:VB
كود :
[align=left]        If MessageBox.Show("هل أنت متأكد", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then Exit Sub

        Try
            db.Users.DeleteOnSubmit(CType(unlist.SelectedValue, DB.Users))
            db.SubmitChanges()

            MessageBox.Show("تم حذف المستخدم", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

        Catch ex As Exception

        End Try
[/align]
الرد }}}
تم الشكر بواسطة:
#17
في النموذج الرئيسي، ادرجنا قائمة ووضعنا فيها بعض الخيارات، منها خيار (حذف مستخدم)، غير النص بـ: تعديل مستخدم.

اضغط مرتين على خيار (مستخدم جديد) في القائمة، لننتقل للكود ونكتب:
:#C
كود :
[align=left]AddNewUser anu = new AddNewUser();
anu.ShowDialog();
[/align]
:VB
كود :
[align=left]AddNewUser.ShowDialog()
[/align]

ثم اضغط على خيار (تعديل مستخدم) من القائمة، سنكتب:
:#C
كود :
[align=left]EditUsers eu = new EditUsers();
eu.ShowDialog();
[/align]
:VB

كود :
[align=left]EditUsers.ShowDialog()
[/align]
الرد }}}
تم الشكر بواسطة:
#18
السلام عليكم

فهمت تماماً والحمد لله وقررت استخدامها في مشروعي الحالي والتالي

شكرا يا استاذ ربيع
الرد }}}
تم الشكر بواسطة:
#19
اخي انا مبارح طبقت درسك وفي كتير كتير اسئلة حابب اسئلها ورجاءً وقت تكون فاضي جاوب عليها يعني على راحتك مالي مضطر عليها بسرعة وقت تفضى جاوب عليهم ولاتضغط على حالك والله يجزيك ألف ألف خير

1- ما معنى الخاصية Auto-Sync
2- هل الــخاصية PersonID لها نفس خواص الــ ID في الزيادة التلقائية والــ Primary key و إلخ
3- ليه عملت كونكشن مرتين ؟؟ هههه هي مافهمتها
4- مامعنى التسمية .\sqlexpress وخصوصا الباك سلاش والنقطة وهل يمكنني ان اسميه كما اريد
5- عندما كتبنا الكود التالي private DB.PhoneBookDB db = new DB.PhoneBookDB(); فنحن انشئنا الأوبجكت db من الكلاس DB اليس ذلك صحيح ؟؟ وهل تسمى هذه العملية كبسلة Encapsulation أم Abstract تجريد
6- لماذا عرفنا الكود السابق على انه Private وبكلاس الفورم لود هل يصح ان نضعه في التصريحات العامة ام ماذا ؟
7- في هذا الكود لاحظت ان تسلسل البارامترات ليس كتسلسل البارامترات المعطى من اللغة _

MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }

حيث ان يجب ان يكون أول بارامتر هو البارامتر الأونر او المالك "لم افهم اصلاً ماذا يعني أونر والثاني هي الجملة النصية هل الـ ex.message هي الجملة النصية الا يجب ان يكون بعد القوس مباشرة علامة ,

8- هذا الكود اكثر شيء جنني وعملت عليه جلسة تاأمل كاملة ههههه وماكنت افهم قصته

var users = from d in db.Users
where d.Admin
select d;

ليش استخدمنا كلمة var هل هذا يعني Variant ام ماذا وليه ماعطانا الكومبايلر خطأ لاننا مااستخدمنا السيمي كولن او الــفاصلة المنقوطة في نهاية كل سطر ;

9- في الكود السابق مالف افهمه ايضاً ان هل نحن هنا جلبنا المدراء ام انشئنا مدير اي الكود السابق هل يستخدم لجلب البيانات ام إنشاء البيانات
10- آه يبدوا ان هذا هو الكود المسؤول عن إنشاء مدير

DB.Users admin = new DB.Users();
admin.Username = "Admin";
admin.Password = "Admin";
admin.Admin = true;
admin.Active = true;

هل هذا صحيح اخي الحبيب
11- وهذان السطران تسببا لي بإرتباك شديد جداً

db.Users.InsertOnSubmit(admin);
db.SubmitChanges();

نحن استخدمنا هنا الأوبجكت db الذي انشئناه من الصف او الكلاس DB اليس كذلك اخي الحبيب ولكن لمااااذا لم نستخدم الأوبجكت عندما انشئنا مديراً جديداً

12- عندما قمت اخي الحبيب بإنشاء الأوبجكت mf من الفورم الرئيسي MainForm بدأت بإستخدام العناصر الموجودة في الفورم الرئيسي من فورم آخر
كمثال :
mf.newuser.Enabled = user.SingleOrDefault().Admin;
هنا استخدمنا القائمة newuser مع العلم ان القائمة المودفاير الخاص بها هو Private ولقد ظهر لي خطأ عندما عملت كومبايل للبرنامج فأضطررت لتغيير الخاصية Modifier إلى Public حتى اختفت كل الأخطاء وقس على ذلك كل أوبجكت انشأناه من فورم ما هل مافعلته انا صحيح ام ان هناك خطأ ما ؟؟

13- لم افهم هذه الجزئية اخي الحبيب
PHP كود :
private string un  String.Empty;
 
internal string Username
{
    
get { return un; }
    
set un value; }


14- عندما كتبت انت هذا الكود
PHP كود :
unbox.Text.Trim(); 
هل يصح كتابته بالشكل التالي
PHP كود :
string.trim(unbox.text); 

15- هل هناك طريقة لعمل BackUP للقاعدة وعمل إستيراد وتصدير لها
إلى هنا انتهت الأسئلة لا أعلم اذا كان هناك وابل آخر من الأسئلة (; آسف متأسف بشدة على كثرة الأسئلة مثل مابتعرف انا منتقل جديد للدوت نت وبدي دعم
الله يجزك ألف خير مرة تانية ياااااخي العزيز جداً ربيع والله يجعل هذا في ميزان حسناتك إن شاء الله تعالى

والسلام عليكم ورحمة الله وبركاته
الرد }}}
تم الشكر بواسطة:
#20
أبو يعقوب كتب :السلام عليكم

فهمت تماماً والحمد لله وقررت استخدامها في مشروعي الحالي والتالي

شكرا يا استاذ ربيع

اهلا ومرحبا بك ابو يعقوب، اسعدني كلامك Smile
ارجو ان يكون الشرح بسيط ومفهوم للكل
الرد }}}
تم الشكر بواسطة:



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


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