2010-12-15 92 views
0

J'essaie de faire des comparaisons de date entre une valeur de type textbox acceptant et un type de date dans Excel. Le problème est que les comparaisons de chaînes directes ne semblent pas fonctionner. J'ai besoin de sélectionner uniquement les lignes du fichier Excel où la date est inférieure à la date spécifiée par les formulaires de Eindows textBox. Toute aide serait grandement appréciée. Mon extrait de code:Comparer la valeur de date obtenue à partir de TextBox sous Windows Form, à la valeur Date stockée dans la feuille Excel

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\empdetails.xls;Extended Properties=ImportMixedTypes=Text;Excel 8.0;HDR=Yes;IMEX=1;"; 

OleDbDataAdapter adap = new OleDbDataAdapter("Select * from [Sheet1$] where Date < "+ txtDate.Text + "", connStr); 

DataTable viewemployees= new DataTable(); 

adap.Fill(viewemployees); 

dataGridView1.DataSource=viewemployees; 

Date est une colonne nommée d'accepter les valeurs de type date dans Excel. Format: mm/jj/aaaa.

txtDate est une zone de texte acceptant des valeurs de même format de date. Comment puis-je utiliser des formules dans une requête par rapport à Excel? Pas sûr à ce sujet mais je pense que DateValue peut être d'une certaine aide ici?

+1

utiliser l'objet DateTime et « .TryParse » les deux valeurs. Cela vous permettra de «comparer» directement les deux dates et vous évite d'avoir à écrire toutes sortes de codes d'analyse. –

Répondre

1

J'ai eu un problème semblable au vôtre, j'ai été capable de le résoudre avec ces Data type mismatch in criteria expression | Access, OleDb, C# réponses.

En court, il vous suffit de le faire:

String sql = "select * from [Tabelle1$] WHERE blahblah "' AND (StartDate <= @curDate AND EndDate >= @curDate)"; 
OleDbCommand olDbCmd = new OleDbCommand(sql, con); 
OleDbParameter curDate = new OleDbParameter("curDate", DateTime.Now); 
curDate.DbType = DbType.DateTime; 
olDbCmd.Parameters.Add(curDate); 
OleDbDataAdapter cmd = new System.Data.OleDb.OleDbDataAdapter(olDbCmd); 

Cela devrait résoudre les types-discordances ...

+0

Merci chiffre travaillé comme un charme –

0

Je pense que vous devez utiliser sql pour comparer les deux dates.

Et je pense que vous avez omis la citation pour la date que vous avez obtenu de la zone de texte.

voir une version légèrement modifiée de votre code ci-dessous.

string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\sample.xls;Extended Properties=ImportMixedTypes=Text;Excel 8.0;HDR=Yes;IMEX=1;"; 

OleDbDataAdapter adap = new OleDbDataAdapter("Select * from [Sheet1$] where Date < '"+txtDate.Text+"'", connStr); 

DataTable viewemployees= new DataTable(); 

adap.Fill(viewemployees); 

dataGridView1.DataSource=viewemployees; 

J'espère que cela aide.

+0

l'a essayé au départ scartag mais j'avais une exception de mésappariement sur celle –