ADO.NET Requete SQL sur fichier Access
Bonjour,
Je suis actuellement entrain de programmer sous C# et je suis bloquer quand à la récupération des donnes dans la base Access, j'obtiens une erreur lors de ma requete. J'ai deja fait une requete parametre sur LaClasse et j'ai réussi mais quand je m'attaque aux dates c'est plus corsé!
Voici le code complet :
Code:
1 2 3 4 5 6 7 8 9
| string LaClasse = "3LITI";
DateTime date = DateTime.Now;
string connection = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\database\\horaire.mdb";
string TEST = String.Concat("SELECT * FROM Req_Access WHERE codeClasse='", LaClasse, "' AND ", date, "BETWEEN dateHeuredebut AND dateHeureFin");
System.Data.OleDb.OleDbDataAdapter dAdapter = new System.Data.OleDb.OleDbDataAdapter(TEST, connection); |
Exemple de la base :
codeClasse codeSalle codeMatiere dateHeureDebu dateHeureFin
3LITI B107A AT-INF 19.05.2010 11:30:00 19.05.2010 12:15:00
Il me retourne une erreur de syntaxe en mettant (opérateur absent)
Pourquoi se compliquer la vie
Premièrement ta requête devrait plutôt être :
Code:
"SELECT * FROM Req_Access WHERE codeClasse='" + LaClasse + "' AND , dateHeuredebut < " + date + " AND dateHeureFin > " + date"
Car between ne devrait pas être utiliser de cette maniere.
De plus tu devrais évité de nommer des variable de type date date car c'est un nom réservé et parfois ça peut causer des surprises.
Deuxièmement:
Personellement j'ai eu à dealer avec les dates dans le passé c'etais de la merde surtout l'orsque la base de données est située sur une machine ayant des paramêtres de langues differents. Ma solution les objet OleDbParameter dans ton cas (Access) ... Si tu ne veux pas te cassé la tête avec le format de ta date (et là je ne parle même pas des decimals , vs .) passe tes valeur dans des objets paramêtres. Voilà comment faire:
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
|
Dim Connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=\\srvtm1\data\Data\Access\Datarive.mdb;")
Dim Query As String = "SELECT Client.NoClient, Client.NomClient, Client.NomClientIndex, Client.DateCreation, Client.Adresse, Client.Remarque, Client.Compte" & _
" FROM(Client)" & _
" WHERE (Client.DateCreation > @DateDebut) And (Client.DateCreation < @DateFin)"
Dim Command As OleDbCommand
Dim Parameter As OleDbParameter
Dim DateDebut As DateTime = Now
Dim DataAdapter As OleDbDataAdapter
Dim aDataset As New DataSet
DateDebut.AddYears(-10)
Connection.Open()
Using Connection
Command = New OleDbCommand(Query, Connection)
Parameter = New OleDbParameter
Parameter.OleDbType = OleDbType.Date
Parameter.ParameterName = "@DateDebut"
Parameter.Value = DateDebut
Command.Parameters.Add(Parameter)
Parameter = New OleDbParameter
Parameter.OleDbType = OleDbType.Date
Parameter.ParameterName = "@DateFin"
Parameter.Value = Now
Command.Parameters.Add(Parameter)
DataAdapter = New OleDbDataAdapter(Command)
DataAdapter.Fill(aDataset)
Me.DataGridView1.DataSource = aDataset
End Using |
Très important que les Paramêtre soient introduit dans l'objet commande dans l'ordre de la requête car access fonctionne en mode ordinal.