تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة عند تحزيم البرنامج
#3
الخطأ الذي تواجهه "operation must use an updateable query" يشير عادة إلى أن الاستعلام المستخدم للتحديث غير قابل للتعديل. هناك عدة أسباب محتملة لهذا:

قد يكون الاتصال بقاعدة البيانات مفتوحًا بوضع القراءة فقط.
قد تكون هناك مشكلة في صياغة استعلام التحديث.
قد تكون هناك مشكلة في الصلاحيات على قاعدة البيانات.

لنحاول تحسين الكود لحل هذه المشكلة:

أولاً، دعنا نستخدم باراميترات في الاستعلام لتجنب مشاكل الأمان وتحسين الأداء:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Using conn As New OleDb.OleDbConnection(connectionString)
conn.Open()
Dim sql As String = "UPDATE annagui SET nom = ?, prenom = ?, date_de_naissance = ?, " & _
"lieu_de_naissance = ?, sex = ?, numero_passport = ?, " & _
"date_validation = ?, date_expired = ?, age = ?, cin = ?, " & _
"numero_cin = ?, autre_nationalite = ?, nom_pere = ?, " & _
"nom_grand_pere = ?, nom_mere = ?, prenom_mere = ?, " & _
"profession = ?, qualite = ?, email = ?, adresse_uae = ?, " & _
"tel_uae = ?, etat_civil = ?, nom_epou = ?, prenom_epou = ?, " & _
"validation = ?, expired = ?, remarque = ?, r_sex = ?, r_etat = ? " & _
"WHERE id = ?"

Using cmd As New OleDb.OleDbCommand(sql, conn)
cmd.Parameters.AddWithValue("@nom", TextBox2.Text)
cmd.Parameters.AddWithValue("@prenom", TextBox3.Text)
cmd.Parameters.AddWithValue("@date_de_naissance", DateTimePicker1.Value.ToString("dd/MM/yyyy"))
' ... أضف باقي الباراميترات هنا ...
cmd.Parameters.AddWithValue("@id", TextBox1.Text)

Dim rowsAffected As Integer = cmd.ExecuteNonQuery()

If rowsAffected > 0 Then
MsgBox("تم تحديث البيانات بنجاح", vbInformation, "تحديث")
Form2.load_data()
Else
MsgBox("لم يتم تحديث أي سجل. تأكد من صحة معرف السجل.", vbInformation, "تحديث")
End If
End Using
End Using
Catch ex As Exception
MessageBox.Show("حدث خطأ أثناء تحديث البيانات: " & ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub


هذا الكود يستخدم الأسلوب الموصى به للتعامل مع قواعد البيانات

يستخدم Using للتأكد من إغلاق الاتصال بشكل صحيح.
يستخدم باراميترات لمنع هجمات SQL Injection وتحسين الأداء.
يستخدم ExecuteNonQuery بدلاً من OleDbDataAdapter لأن هذه العملية هي تحديث وليس استعلامًا.

إذا استمرت المشكلة بعد هذه التغييرات، فقد تكون هناك مشكلة في الاتصال بقاعدة البيانات نفسها. تأكد من أن:

لديك الصلاحيات الكافية للكتابة في قاعدة البيانات.
ملف قاعدة البيانات ليس محميًا ضد الكتابة.
سلسلة الاتصال (connection string) صحيحة وتسمح بالكتابة.
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مشكلة عند تحزيم البرنامج - بواسطة annagui - 13-08-24, 11:40 PM
RE: مشكلة عند تحزيم البرنامج - بواسطة الـ ـجارح - 15-08-24, 11:20 AM


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


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