Maelhia
Messages postés21Date d'inscriptionvendredi 25 mars 2022StatutMembreDernière intervention15 février 2023
-
Modifié le 28 mars 2022 à 16:28
Maelhia
Messages postés21Date d'inscriptionvendredi 25 mars 2022StatutMembreDernière intervention15 février 2023
-
11 avril 2022 à 16:40
Bonjour à tous et à toutes !
Je suis nouvelle ici et donc pas encore très habituée au site, j'espère avoir posté ma question au bon endroit ^^'
Je code sur VB via Visual Studio 2013.
Le problème que je rencontre est au moment d'exécuter une requête SQL qui donne accès à une base de donnes SQL Server Management.
(Je ne suis pas hyper à l'aise avec les bases de données, je débute... )
Voici ma requête :
SELECT TOP (1) tbl_prod.TABLE1.DateFin
FROM tbl_ref.TABLE2 INNER JOIN
tbl_ref.TABLE1 ON tbl_ref.TABLE2 .Index = TABLE2 .Index
WHERE (tbl_ref.TABLE1 .NumSerie = '1816') AND (tbl_ref.TABLE2.Reference = '2910-71')
Quand je l'exécute directement depuis ma base de données, tout se passe bien et j'obtiens le résultat souhaité.
Par contre, quand je l'insère dans mon code, elle prend cette forme :
Dim cmdSQL As String
cmdSQL = " SELECT TOP (1) tbl_prod.TABLE1.DateFin FROM tbl_ref.TABLE2 INNER JOIN tbl_ref.TABLE1 ON tbl_ref.TABLE2 .Index = TABLE2 .Index WHERE (tbl_ref.TABLE1 .NumSerie = ' " & NumSerie & " ') AND (tbl_ref.TABLE2.Reference = ' " & Reference & " ')
où NumSerie et Reference sont deux variables String de mon code qui sont alimentées par lecture d'un fichier excel.
Dans le fichier excel, les valeurs lues sont au format Texte.
Le problème, c'est que lorsque j'exécute mon code, j'obtiens un message d'erreur sur cette partie :
'*** CREATION DE LA CONNEXION A LA BASE DE DONNEES
Dim connection As New OdbcConnection
connection.ConnectionString() = DSN_BDD
connection.Open()
'*** CREATION ET EXECUTION DE LA COMMANDE SQL
Dim SQLCommand As New OdbcCommand(cmdSQL, connection)
'*** LECTURE DES INFOS DE LA BDD
Dim Lecteur As OdbcDataReader
Lecteur = SQLCommand.ExecuteReader
Sur la ligne : " Lecteur = SQLCommand.ExecuteReader " j 'obtiens ce message d'erreur :
[ Une exception non gérée du type 'System.Data.Odbc.OdbcException' s'est produite dans System.Data.dll
Informations supplémentaires : ERROR [22018] [Microsoft][ODBC SQL Server Driver][SQL Server]Échec de la conversion de la valeur varchar '2910-71' en type de données int. ]
'2910-71' est ce qui est contenu dans ma variable Reference.
Je sais que mon bout de code fonctionne pour lire et récupérer les infos de ma base de données car je l'ai déjà testé avec d'autres variables que Reference (qui à chaque étaient initialisées en tant que string mais contenaient des nombres).
Je ne comprends pas pourquoi il veut convertir ma variable Reference en int...
Je ne comprends pas non plus comment elle passe de "String" à "varchar" .
Avez-vous des idées pour résoudre ce problème ?
J'espère que j'ai été claire, si vous avez besoin de plus d'informations faîtes-le moi savoir !
Merci d'avance !!
A voir également:
Échec de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractères.
Bonjour,
Le message est claire {varchar '2910-71' en type de données int. ]}
Il considère que '2910-71' est un varchar ce qui est vrai mais ne peut pas le convertir en integer pour respecter de type de champ de référence !
Vérifies dans ta base le type du champ Reference.
Notes également que Reference est un mot reservé SQL serveur.
Essai avec de crochets [tbl_ref].[TABLE2].[Reference]
Maelhia
Messages postés21Date d'inscriptionvendredi 25 mars 2022StatutMembreDernière intervention15 février 20231 11 avril 2022 à 16:40
Merci pour ta réponse !
En effet, dans ma base de donnée, ma colonne correspondant à Reference était de type int et non pas de type string...
J'ai donc modifié ça dans la base de données et maintenant tout fonctionne .
vb95
Messages postés3439Date d'inscriptionsamedi 11 janvier 2014StatutNon membreDernière intervention25 novembre 2023165 27 mars 2022 à 14:38
Bonjour
Varchar est le terme générique pour signifier "chaine de caractères" ou "String" en anglais . C'est ton moteur de base de données qui utilise cette notion . VB Net lui ne connaît que le type String .
Avez vous défini dans le code VB une variable pour Reference ? De quelle type est-elle ?
Maelhia
Messages postés21Date d'inscriptionvendredi 25 mars 2022StatutMembreDernière intervention15 février 20231 29 mars 2022 à 14:07
Merci pour ta réponse,
ma variable Reference est définie en tant que String
Il faudrait donc que je la déclare en varchar ou que j'utilise un convert ?
vb95
Messages postés3439Date d'inscriptionsamedi 11 janvier 2014StatutNon membreDernière intervention25 novembre 2023165 Modifié le 29 mars 2022 à 17:04
Bonjour !
Si ta variable Reference est définie comme une String dans ton projet et comme un Varchar dans ta BDD tout cela est correct .
Cherche dans ton code si en utilisant la variable Reference tu ne le convertit pas en Int ( ce qui normalement devrait déclencher une erreur car "2910-71" ne peut être converti en int ) .
11 avril 2022 à 16:40
En effet, dans ma base de donnée, ma colonne correspondant à Reference était de type int et non pas de type string...
J'ai donc modifié ça dans la base de données et maintenant tout fonctionne .
Merci à tous et toutes pour votre aide