J'essaie de mettre à jour ma table avec les enregistrements actuels avec les jours réels de la semaine (chaînes), mais mon code me donne l'erreur:

Type de données incorrecte dans l'expression du critère

J'ai rigoureusement vérifié mon instruction SQL pour m'assurer que les bons types de données sont utilisés, mais je n'ai pas pu identifier de problème. Quelqu'un peut-il m'aider à identifier où se situe mon problème et les solutions potentielles.

L'instruction SQL est be:

str = "Update [tblAppointments] Set [Day] ='" & day & "' WHERE [TimeID] ='" & redbutton & "'"

redbutton = 18 

day = "wednesday"

Voici la base de données avec laquelle je travaille:

database

1
Vbv123 21 avril 2017 à 14:55

3 réponses

Meilleure réponse

Tout d'abord, utilisez les paramètres SQL. Cela ne peut pas être assez souligné. Voir Comment l'injection SQL à partir du Une bande dessinée XKCD "Bobby Tables"? pour mieux comprendre pourquoi c'est important.

Sachez que lorsque vous utilisez des paramètres OleDb, c'est l'ordre dans lequel ils sont ajoutés qui est important, pas le nom. Cela en soi peut causer des problèmes. Assurez-vous de les ajouter tels qu'ils apparaissent dans la commande. Dans votre cas Day puis TimeID.

Votre code ressemblerait à quelque chose de similaire à:

Using con As New OleDbConnection(connectionString),
      cmd As New OleDbCommand("UPDATE [tblAppointments] SET [Day] = ? WHERE [TimeID] = ?", con)

    cmd.Parameters.Add(New OleDbParameter("Day", OleDbType.VarChar)).Value = "wednesday"
    cmd.Parameters.Add(New OleDbParameter("TimeID", OleDbType.Integer)).Value = 18

    con.Open()

    cmd.ExecuteNonQuery()
End Using
0
Bugs 21 avril 2017 à 15:47

D'autres l'ont suggéré, je vais le préciser: Utiliser le paramétrage Sql

Ainsi,

Dim day As String = "Wednesday"
Dim redbutton As Integer = 18

Dim qp As New List(Of SqlParameter)
qp.Add(New SqlParameter("@DAY", SqlDbType.VarChar) With {.Value = day})
qp.Add(New SqlParameter("@redbutton", SqlDbType.Int) With {.Value = redbutton})

var str = "Update [tblAppointments] Set [Day] = @DAY WHERE [TimeID] = @redbutton"
executeNonQuery(str,qp) 'Or however you're communicating with database.

Voir Comment: exécuter une requête paramétrée pour plus d'informations.

0
IronAces 21 avril 2017 à 12:18

Merci pour votre aide j'ai trouvé une solution à mon problème

Dim str = "Update [tblAppointments] Set [Day] ='" & day & "' WHERE [TimeID] =" & CInt(redbutton) & " ;"

Faire cela a permis à mon programme de fonctionner, cependant, je me rends compte qu'il est plus sûr d'utiliser du SQL paramétré, mais je n'ai pas de moyen clair de le faire.

0
Vbv123 21 avril 2017 à 15:47