سؤال

    Dim conn As OleDbConnection
    Dim cmd As OleDbCommand

    Public Sub openDB()
        conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\VFMS_DB.mdb;" & "Jet OLEDB:System Database=Security.mdw;User ID=Adster;Password=300624;")
        conn.Open()
    End Sub

    Public Function UpdateUser() As Integer
        Dim retCode As New Integer

        Try
            openDB()
            cmd = conn.CreateCommand()

التحديث الأوامر أدناه باعطائي هذا الخطأ:"التحويل من سلسلة" أين [Username] = '" إلى نوع 'ضعف' غير صالح." وأنا لا أعرف لماذا.على aUserName الحقل هو حقل السلسلة وأنا أتأكد من انها بالسكان.

            cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & "', [Last Name] = '" & aSurname & "', [Contact Number] = '" & aContactNum & "', [Password] = '" & aPassword & "', [User Rights] = '" & aUserRights + "' WHERE [Username] = '" + aUserName + "' "

            cmd.ExecuteNonQuery()
            conn.Close()

            'rsAddRecs = rsConn.Execute("UPDATE Users ([First Name], [Last Name], [Contact Number], [User Name], [Password], [User Rights]) VALUES ('" & aName & "','" & aSurname & "','" & aContactNum & "','" & aUserName & "','" & aPassword & "','" & aUserRights & "')")

            retCode = 0
            'rsConn.Close()
            Return retCode

        Catch ex As Exception
            MessageBox.Show(ex.ToString, ex.Message, MessageBoxButtons.OK)
            retCode = 1
            Return retCode
        End Try
    End Function
هل كانت مفيدة؟

المحلول

لديك خطأ مطبعي.كنت تستخدم + concat الشخصيات في نهاية سلسلة sql بدلا من & الشخصيات

الخطأ

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _ 
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights + "' WHERE [Username] = '" + aUserName + "' "
'                             ^                          ^           ^

صحيح

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
                  "', [Last Name] = '" & aSurname & _
                  "', [Contact Number] = '" & aContactNum & _
                  "', [Password] = '" & aPassword & "', [User Rights] = '" & _
                  aUserRights & "' WHERE [Username] = '" & aUserName & "' "
'                             ^                          ^           ^

نصائح أخرى

ويستخدم كود SQL أنت [Username]:

cmd.CommandText = "UPDATE Users SET ... [Username]...

وبينما كنت قد علقت من الرموز المستخدمة [User Name]:

'rsAddRecs = rsConn.Execute("UPDATE Users ... [User Name]...

ويمكن أن يكون اسم العمود الخطأ مصدر المشكلة؟

وفكرة أخرى: هل مطهرة قيم المعلمات على سبيل المثال يمكن للقيمة تحتوي على الاقتباس واحد هو أن الإخلال SQL الحيوية. في أي حال، أعتقد أن عليك أن تنظر في استخدام البيانات المعدة (أو حتى إجراءات) وباستخدام كائنات معلمة لاستدعاء SQL، وبالتالي تأجيل التعقيم القيم المعلمة إلى مزود OLE DB، والتي بالطبع سوف تعرف المزيد عن هذا الموضوع من أنت أو أنا:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top