Requête paramétrée fonctionnant avec le Integer mais pas avec les String
Voila j'ai quelque chose de ce genre:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
Dim marque As String
Dim desc As String
marque = txtmarque.Text
desc = txtdesc.Value
Dim oConnection As New OleDbConnection
Dim sConnectionString As String
sConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " & Server.MapPath("********.mdb")
oConnection.ConnectionString = sConnectionString
oConnection.Open()
Dim cmd As OleDbCommand
cmd = New OleDbCommand("UPDATE produit SET idfamille = @idfamille, idssfamille = @idssfamille, idcategorie = @idcategorie, nomproduit= @marque, descproduit= '" & desc & "' WHERE idproduit = " & id1 & "", New OleDbConnection(sConnectionString))
'idfamille
Dim param As DbParameter = cmd.CreateParameter()
param.ParameterName = "@idfamille"
param.DbType = DbType.Int32
param.Value = idfamille
cmd.Parameters.Add(param)
'idssfamille
Dim param2 As DbParameter = cmd.CreateParameter()
param2.ParameterName = "@idssfamille"
param2.DbType = DbType.Int32
param2.Value = idssfamille
cmd.Parameters.Add(param2)
'idcategorie
Dim param3 As DbParameter = cmd.CreateParameter()
param3.ParameterName = "@idcategorie"
param3.DbType = DbType.Int32
param3.Value = idcategorie
cmd.Parameters.Add(param3)
'quantite
Dim param4 As DbParameter = cmd.CreateParameter()
param4.ParameterName = "@quantite"
param4.DbType = DbType.Int32
param4.Value = quantite
cmd.Parameters.Add(param4)
'marque
Dim param5 As DbParameter = cmd.CreateParameter()
param5.ParameterName = "@marque"
param5.DbType = DbType.String
param5.Value = marque.ToString()
cmd.Parameters.Add(param5)
'description
Dim param6 As DbParameter = cmd.CreateParameter()
param6.ParameterName = "@descproduit"
param6.DbType = DbType.String
param6.Value = desc
cmd.Parameters.Add(param6)
cmd.Connection.Open()
cmd.ExecuteNonQuery()
cmd.Connection.Close()
'End If
Catch ex As Exception
Label2.Text = "ERREUR: " & ex.Message
End Try
' Fermeture de la connexion
oConnection.Close() |
Et voila ma requête paramétrée fonctionne pour toutes les variables en Integer (avec DbType.Int32) mais dès que j'essaie de faire passer la variable "marque" ou "desc"'(avec DbType.String) ça ne fonctionne pas en me disant:
"Type de données incompatible dans l'expression du critère"
Alors que dans la base de données Access: nomproduit et descproduit (les champs destinataires des variables marque et desc) sont en Texte.
J'ai essayé avec .Stringfixedlength, avec AnsiString, avec AnsiStringFixedlength, en précisant moi même le .Size du paramètre, en convertissant la variable encore une fois en .ToString (comme indiqué plus haut) mais toutes ces méthodes ce sont révélées infructueuses.
Je voudrais savoir qu'est-ce que je devrais faire de spécial pour passer un dbtype.string dans cette requête.
Merci d'avance.
NB: J'ai volontairement changé le chemin de la base de données, les étoiles ne sont donc pas la cause des erreurs.