comment interroger DBF(dbase) les fichiers de champ de type date de l'endroit et la entre la clause
J'ai un fichier DBF et je suis en train de le lire à partir de code c#. Je peux lire les fichiers correctement, sans appliquer des conditions ou des conditions d'application pour les champs de type varchar.Mon problème est que je dois filtrer les enregistrements à partir de la Date de champ (type:date). J'ai essayé une des manières suivantes,
SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 12:00:00 AM and 2/20/2006 12:00:00 AM
ci-dessus donne une Erreur de syntaxe: opérateur manquant
SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between '2/16/2006 12:00:00 AM' and '2/20/2006 12:00:00 AM'
ci-dessus donne un type de données erreur d'incompatibilité de
SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 and 2/20/2006
ci-dessus ne jetez pas l'exception, mais ne renvoie aucun enregistrement bien qu'il existe des enregistrements correspondants.
La même chose se produit pour la clause where.
Que puis-je faire pour filtrer les enregistrements à partir d'une gamme
Je suis en utilisant le code suivant pour le lire
OdbcCommand cmd = new OdbcCommand();
OdbcDataAdapter da = new OdbcDataAdapter();
DataTable dt = new DataTable();
using (OdbcConnection connection = new OdbcConnection(connstring))
{
connection.Open();
cmd = new OdbcCommand(@"SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 12:00:00 AM and 2/20/2006 12:00:00 AM", connection);
cmd.CommandType = CommandType.Text;
da.SelectCommand = cmd;
da.Fill(dt);
}
Son un fichier dbase
OriginalL'auteur user1450810 | 2012-09-20
Vous devez vous connecter pour publier un commentaire.
OK -
Je crois que le problème, c'est que dBase/xBase ne prend pas en charge "entre" pour SQL dates
Solution de CONTOURNEMENT:
@"SELECT * FROM D:\DBFreader\file.dbf where [RDATE] >= #2/16/2006 12:00:00 AM# and [RDATE] < #2/20/2006 12:00:00 AM#"
PS:
Je sais dBase syntaxe prend en charge le "date" littéraux (par exemple, "2/16/2006"; je ne sais pas à propos de "datetime" - s'il vous plait essayez et vous verrez.
OriginalL'auteur paulsm4
dbase/Foxpro syntaxe pour ENTRE (et fonctionne sur n'importe quel des mêmes types de données) est
afin que votre requête pourrait être fait comme
dans le vieux DBase et VFP en avant, CTOD() est l'acronyme de Caractère À la Date de conversion et attend dans le format mm/jj/aaaa. En faisant juste le "date", il implique toujours 12:00:00 AM.
en outre, vous pouvez utiliser la fonction DATE() disponible comme
date( aaaa, mm, jj ) Date( 2006, 02, 16), qui permettrait également de retour cette date précise.
Si vous vouliez un temps spécifique, vous pouvez utiliser BCCT (), qui représente le Caractère DE champ dateTime, comme
OriginalL'auteur DRapp
Pas un DBase expert, mais cette et cette semble prometteur.
OriginalL'auteur AxelEckenberger
Cela a fonctionné pour moi,
J'ai vérifié cela avec Connexion OLEDB
OriginalL'auteur Risky Pathak