SQL Server : Echec de la conversion varchar en int

Résolu
Maelhia Messages postés 21 Date d'inscription vendredi 25 mars 2022 Statut Membre Dernière intervention 15 février 2023 - Modifié le 28 mars 2022 à 16:28
Maelhia Messages postés 21 Date d'inscription vendredi 25 mars 2022 Statut Membre Dernière intervention 15 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 & " ')



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:

4 réponses

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]
1
Maelhia Messages postés 21 Date d'inscription vendredi 25 mars 2022 Statut Membre Dernière intervention 15 février 2023 1
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 .

Merci à tous et toutes pour votre aide
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
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 ?
0
Maelhia Messages postés 21 Date d'inscription vendredi 25 mars 2022 Statut Membre Dernière intervention 15 février 2023 1
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 ?
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
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 ) .

0
Rejoignez-nous