J'effectue un SELECT avec un paramètre, de façon à récupérer uniquement les valeurs de la ligne dont je donne la clé primaire. J'ai bien donné une valeur à mon paramètre avant d'exécuter la requête, pourtant elle lève une OleDbException "No value given for one or more required parameters".
Le plus perturbant est que ça marche pour la première base, mais pas pour la seconde.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 System.Data.OleDb.OleDbCommand cmd1 = new System.Data.OleDb.OleDbCommand("SELECT Nom, Prenom, Age FROM Personnes WHERE PersonneID = ?", new System.Data.OleDb.OleDbConnection(cnStr1)); cmd1.Parameters.Add(null, System.Data.OleDb.OleDbType.Integer); cmd1.Parameters[0].Value = 1; cmd1.Connection.Open(); System.Data.OleDb.OleDbDataReader dr1 = cmd1.ExecuteReader(); dr1.Close(); cmd1.Connection.Close(); System.Data.OleDb.OleDbCommand cmd2 = new System.Data.OleDb.OleDbCommand("SELECT Surname, Name, Class FROM Persons WHERE PersonID = ?", new System.Data.OleDb.OleDbConnection(cnStr2)); cmd2.Parameters.Add(null, System.Data.OleDb.OleDbType.Integer); cmd2.Parameters[0].Value = 1; cmd2.Connection.Open(); System.Data.OleDb.OleDbDataReader dr2 = cmd2.ExecuteReader(); // c'est là que ça plante dr2.Close(); cmd2.Connection.Close();
Les deux bases sont des bases Access, de structures semblables. Les champs PersonneID et PersonID sont bien des entiers dans les deux cas.
Si je modifie le texte de ma requête pour obtenir : "SELECT Surname, Name, Class FROM Persons WHERE PersonID = 1", ça marche, donc ce n'est pas dans la requête qu'il y a une erreur.
Je ne comprends vraiment pas ce qui peut se passer pour qu'une exception soit levée à cet endroit... Je suis persuadée qu'il n'y a pas d'erreur de fond dans le code - l'exemple de la première base étant là pour confirmer - , et surtout je ne comprends pas la différence de traitement entre les deux requêtes. Quelqu'un aurait-il une explication possible ?
Partager