13 | Insert student information to the Database. - VB.NET & SQL Server

شرح الكود:

هذا الكود ينتمي إلى حدث النقر على زر الحفظ (btn_save). يقوم بجمع معلومات الطالب من الحقول المدخلة ثم يحفظها في قاعدة البيانات. إليك الشرح المفصل لكل جزء من الكود:

١. التحقق من رغبة المستخدم في الحفظ:

If MsgBox("هل ترغب بحفظ معلومات الطالب", vbMsgBoxRight + MsgBoxStyle.Question + vbYesNo, Title:="جاري الحفظ ...") = vbYes Then

  • يظهر رسالة تأكيد للمستخدم تسأله إذا كان يرغب في حفظ معلومات الطالب. إذا اختار "نعم"، يستمر الكود.

٢. إنشاء اتصال بقاعدة البيانات:

Dim con As New SqlConnection(conString)

Dim dt As New DataTable

dt.Clear()

  • يتم إنشاء كائن الاتصال con باستخدام سلسلة الاتصال conString. يتم أيضًا إنشاء DataTable للتأكد من أنها فارغة.


٣. إعداد الأمر SQL لإدخال البيانات:

 Using cmd As New SqlCommand("INSERT INTO tbl_st_info (st_name, stage_id, group_id, registration_date, academic_year, st_gender, st_ph_no, pa_ph_no, discount, discount_type, study_fee, added_date, added_by,account_status, notes)

VALUES 

(@st_name, @stage_id, @group_id, @registration_date, @academic_year, @st_gender, @st_ph_no, @pa_ph_no, @discount, @discount_type, @study_fee, @added_date, @added_by,@account_status, @notes)", con)

  • يتم إعداد أمر SQL لإدخال بيانات الطالب في جدول tbl_st_info.

٤. إضافة ال Parameters:

cmd.Parameters.AddWithValue("@st_name", txt_name.Text)

cmd.Parameters.AddWithValue("@stage_id", cbox_stage_id.Text)

cmd.Parameters.AddWithValue("@group_id", cbox_group_id.Text)

cmd.Parameters.AddWithValue("@registration_date", dtp_reg.Value)

cmd.Parameters.AddWithValue("@academic_year", cbox_AcademicYear.Text)

cmd.Parameters.AddWithValue("@st_gender", cbox_gender.Text)

cmd.Parameters.AddWithValue("@st_ph_no", txt_ph_st.Text)

cmd.Parameters.AddWithValue("@pa_ph_no", txt_ph_parent.Text)

cmd.Parameters.AddWithValue("@discount", txt_discount.Text)

cmd.Parameters.AddWithValue("@discount_type", txt_dis_type.Text)

cmd.Parameters.AddWithValue("@study_fee", txt_fee.Text)

cmd.Parameters.AddWithValue("@added_date", Date.Now.ToString("yyyy/MM/dd hh:mm:ss"))

cmd.Parameters.AddWithValue("@added_by", UserLogin)

cmd.Parameters.AddWithValue("@account_status", "مفعل")

cmd.Parameters.AddWithValue("@notes", txt_notes.Text)

 

    cmd.CommandType = CommandType.Text

    cmd.CommandTimeout = 420

تفصيل أكثر حول إضافة المعلمات باستخدام cmd.Parameters.AddWithValue

هذه الأسطر من الكود تقوم بتحديد المعلمات التي سيتم استخدامها في أمر SQL لإدخال بيانات الطالب إلى قاعدة البيانات. كل معلمة تمثل حقلًا معينًا في قاعدة البيانات. إليك تفصيل لكل سطر:

١. cmd.Parameters.AddWithValue("@st_name", txt_name.Text)

  • @st_name: معلمة تمثل اسم الطالب.
  • txt_name.Text: القيمة التي تم إدخالها في حقل اسم الطالب.

٢. cmd.Parameters.AddWithValue("@stage_id", cbox_stage_id.Text)

  • @stage_id: معلمة تمثل هوية الصف (المرحلة).
  • cbox_stage_id.Text: القيمة المحددة في ComboBox الخاصة بالمرحلة.

٣. cmd.Parameters.AddWithValue("@group_id", cbox_group_id.Text)

  • @group_id: معلمة تمثل هوية المجموعة.
  • cbox_group_id.Text: القيمة المحددة في ComboBox الخاصة بالمجموعة.

٤. cmd.Parameters.AddWithValue("@registration_date", dtp_reg.Value)

  • @registration_date: معلمة تمثل تاريخ التسجيل.
  • dtp_reg.Value: القيمة المحددة في DateTimePicker الخاصة بتاريخ التسجيل.

٥. cmd.Parameters.AddWithValue("@academic_year", cbox_AcademicYear.Text)

  • @academic_year: معلمة تمثل السنة الدراسية.
  • cbox_AcademicYear.Text: القيمة المحددة في ComboBox الخاصة بالسنة الدراسية.

٦. cmd.Parameters.AddWithValue("@st_gender", cbox_gender.Text)

  • @st_gender: معلمة تمثل جنس الطالب.
  • cbox_gender.Text: القيمة المحددة في ComboBox الخاصة بالجنس.

٧. cmd.Parameters.AddWithValue("@st_ph_no", txt_ph_st.Text)

  • @st_ph_no: معلمة تمثل رقم هاتف الطالب.
  • txt_ph_st.Text: القيمة المدخلة في حقل رقم الهاتف.

٨. cmd.Parameters.AddWithValue("@pa_ph_no", txt_ph_parent.Text)

  • @pa_ph_no: معلمة تمثل رقم هاتف ولي الأمر.
  • txt_ph_parent.Text: القيمة المدخلة في حقل رقم هاتف ولي الأمر.

٩. cmd.Parameters.AddWithValue("@discount", txt_discount.Text)

  • @discount: معلمة تمثل نسبة الخصم.
  • txt_discount.Text: القيمة المدخلة في حقل الخصم.

١٠. cmd.Parameters.AddWithValue("@discount_type", txt_dis_type.Text) - @discount_type: معلمة تمثل نوع الخصم. - txt_dis_type.Text: القيمة المدخلة في حقل نوع الخصم.

١١. cmd.Parameters.AddWithValue("@study_fee", txt_fee.Text) - @study_fee: معلمة تمثل مبلغ الدراسة. - txt_fee.Text: القيمة المدخلة في حقل مبلغ الدراسة.

١٢. cmd.Parameters.AddWithValue("@added_date", Date.Now.ToString("yyyy/MM/dd hh:mm:ss")) - @added_date: معلمة تمثل تاريخ ووقت إضافة البيانات. - Date.Now.ToString("yyyy/MM/dd hh:mm"): تحصل على التاريخ والوقت الحالي بصيغة محددة.

١٣. cmd.Parameters.AddWithValue("@added_by", UserLogin) - @added_by: معلمة تمثل اسم المستخدم الذي أضاف البيانات. - UserLogin: متغير يحتوي على اسم المستخدم الحالي.

١٤. cmd.Parameters.AddWithValue("@account_status", "مفعل") - @account_status: معلمة تمثل حالة حساب الطالب. - "مفعل": القيمة الثابتة التي تعني أن الحساب مفعل.

١٥. cmd.Parameters.AddWithValue("@notes", txt_notes.Text) - @notes: معلمة تمثل الملاحظات. - txt_notes.Text: القيمة المدخلة في حقل الملاحظات.

خلاصة:

كل سطر من هذه الأسطر يربط قيمة مدخلة من واجهة المستخدم مع معلمة في أمر SQL، مما يسهل إدخال البيانات بطريقة آمنة ومنظمة. استخدام المعلمات يساعد أيضًا في الحماية من هجمات SQL Injection حيث أن القيم تُعالج بشكل آمن

٥. فتح الاتصال وتنفيذ الأمر:

con.Open()

cmd.ExecuteNonQuery()

con.Close()

  • يتم فتح الاتصال بقاعدة البيانات، ثم يتم تنفيذ الأمر باستخدام ExecuteNonQuery لحفظ البيانات، وبعد ذلك يتم إغلاق الاتصال.

٦. عرض رسالة تأكيد:

MsgBox("تم حفظ بيانات الطالب بنجاح", vbMsgBoxRight + MsgBoxStyle.Information, "جاري الحفظ...")





ظهر رسالة تأكيد تفيد بأن بيانات الطالب قد تم حفظها بنجاح
.

خلاصة:

هذا الكود يعالج إدخال بيانات الطالب والتحقق من رغبة المستخدم في حفظها، ثم يقوم بإدخالها إلى قاعدة البيانات. كما يقوم بتحديث واجهة المستخدم إذا لزم الأمر.

الأدوات المستخدمة في النموذج

١. TextBox (txt_name): - يستخدم لإدخال اسم الطالب.

٢. TextBox (txt_fee): - يستخدم لإدخال مبلغ الدراسة.

٣. TextBox (txt_ph_st): - يستخدم لإدخال رقم هاتف الطالب.

٤. TextBox (txt_ph_parent): - يستخدم لإدخال رقم هاتف ولي أمر الطالب.

٥. ComboBox (cbox_stage): - يستخدم لتحديد صف الطالب (المرحلة).

٦. ComboBox (cbox_AcademicYear): - يستخدم لتحديد السنة الدراسية.

٧. ComboBox (cbox_gender): - يستخدم لتحديد جنس الطالب.

٨. ComboBox (cbox_group_id): - يستخدم لتحديد هوية المجموعة.

٩. DateTimePicker (dtp_reg): - يستخدم لتحديد تاريخ التسجيل.

١٠. TextBox (txt_discount): - يستخدم لإدخال نسبة الخصم.

١١. TextBox (txt_dis_type): - يستخدم لإدخال نوع الخصم.

١٢. TextBox (txt_notes): - يستخدم لإدخال ملاحظات إضافية حول الطالب.

١٣. Button (btn_save): - يستخدم لحفظ معلومات الطالب بعد التحقق من المدخلات.



الكود كاملا داخل زر  -  btn_save

 Private Sub btn_save_Click(sender As Object, e As EventArgs) Handles btn_save.Click

 

   If txt_name.Text = "" Then

            MsgBox("الرجاء كتابة اسم الطالب قبل الحفظ", vbMsgBoxRight + MsgBoxStyle.Exclamation, "اسم الطالب مطلوب")

            txt_name.Select()

            Return

        End If

 

        If txt_fee.Text = "" Then

            MsgBox("الرجاء ادخال مبلغ الدراسة", vbMsgBoxRight + MsgBoxStyle.Exclamation, "مبلغ الدراسة مطلوب")

            txt_fee.Select()

            Return

        End If

 

        If txt_ph_parent.Text = "" Then

            MsgBox("الرجاء كتابة رقم هاتف ولي امر الطالب قبل الحفظ", vbMsgBoxRight + MsgBoxStyle.Exclamation, "رقم هاتف ولي امر الطالب ...")

            txt_ph_parent.Select()

            Return

        End If

 

        If cbox_stage.Text = "" Then

            MsgBox("الرجاء تحديد صف الطالب قبل الحفظ", vbMsgBoxRight + MsgBoxStyle.Exclamation, "صف الطالب مطلوب ...")

            cbox_stage.Select()

            Return

        End If

 

 

        If cbox_AcademicYear.Text = "" Then

            MsgBox("الرجاء تحديد السنة الدراسية قبل الحفظ", vbMsgBoxRight + MsgBoxStyle.Exclamation, "السنة الدراسية مطلوبة ...")

            cbox_AcademicYear.Select()

            Return

        End If

 

 

        If MsgBox("هل ترغب بحفظ معلومات الطالب", vbMsgBoxRight + MsgBoxStyle.Question + vbYesNo, Title:="جاري الحفظ ...") = vbYes Then

            Dim con As New SqlConnection(conString)

            Dim dt As New DataTable

            dt.Clear()

 

            Using cmd As New SqlCommand("INSERT INTO tbl_st_info (st_name, stage_id, group_id, registration_date, academic_year, st_gender, st_ph_no, pa_ph_no, discount, discount_type, study_fee, added_date, added_by,account_status, notes)

                                           VALUES (@st_name, @stage_id, @group_id, @registration_date, @academic_year, @st_gender, @st_ph_no, @pa_ph_no, @discount, @discount_type, @study_fee, @added_date, @added_by,@account_status, @notes)", con)

                cmd.Parameters.AddWithValue("@st_name", txt_name.Text)

                cmd.Parameters.AddWithValue("@stage_id", cbox_stage_id.Text)

                cmd.Parameters.AddWithValue("@group_id", cbox_group_id.Text)

                cmd.Parameters.AddWithValue("@registration_date", dtp_reg.Value)

                cmd.Parameters.AddWithValue("@academic_year", cbox_AcademicYear.Text)

                cmd.Parameters.AddWithValue("@st_gender", cbox_gender.Text)

                cmd.Parameters.AddWithValue("@st_ph_no", txt_ph_st.Text)

                cmd.Parameters.AddWithValue("@pa_ph_no", txt_ph_parent.Text)

                cmd.Parameters.AddWithValue("@discount", txt_discount.Text)

                cmd.Parameters.AddWithValue("@discount_type", txt_dis_type.Text)

                cmd.Parameters.AddWithValue("@study_fee", txt_fee.Text)

                cmd.Parameters.AddWithValue("@added_date"Date.Now.ToString("yyyy/MM/dd hh:mm:ss"))

                cmd.Parameters.AddWithValue("@added_by", UserLogin)

                cmd.Parameters.AddWithValue("@account_status""مفعل")

                cmd.Parameters.AddWithValue("@notes", txt_notes.Text)

 

                cmd.CommandType = CommandType.Text

                cmd.CommandTimeout = 420

 

                con.Open()

                cmd.ExecuteNonQuery()

                con.Close()

                MsgBox("تم حفظ بيانات الطالب بنجاح", vbMsgBoxRight + MsgBoxStyle.Information, "جاري الحفظ...")


            End Using

        End If

 End Sub

إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مزيد من التوضيح، فلا تتردد في طرحها!

يمكنكم متابعة الدرس عن طريق اليوتيوب


تعليقات

المشاركات الشائعة من هذه المدونة

7 | Display column's stages from the database into ComboBox's Stage - VB.NET & SQL Server

26 | Filter Students List based on students' stage and Group in DataGridView - VB.NET & SQL Server

8 | Get selected Stage and Group IDs from their ComboBoxes - VB.NET & SQL Server