2010-12-15 5 views
0

Ich versuche, Datumsvergleiche zwischen einem Akzeptanzdatum eines Textfeldwerts und einem Datumstyp in Excel durchzuführen. Problem ist, dass direkte Zeichenfolgenvergleiche nicht funktionieren. Ich muss nur die Zeilen aus der Excel-Datei auswählen, deren Datum kleiner ist als das Datum, das von Eindows forms textBox angegeben wird. Jede Hilfe würde sehr geschätzt werden. Mein Code-Schnipsel:Datumswert aus TextBox in Windows Form vergleichen, zu Datum Wert in Excel-Tabelle gespeichert

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 ist ein benannte Spaltenwert Datumstyp in Excel zu akzeptieren. Format: MM/TT/JJJJ.

txtDate ist ein Textfeld, das Werte des gleichen Datumsformats akzeptiert.

Wie verwende ich Formeln in einer Abfrage gegen Excel? Ich bin mir nicht sicher, aber ich denke, dass DateValue hier eine Hilfe sein kann?

+1

das Objekt Datetime verwenden und ‚.TryParse‘ die beiden Werte. Dadurch können Sie die beiden Daten direkt vergleichen und verhindern, dass Sie alle Arten von Parsing-Code schreiben müssen. –

Antwort

1

Hatte ein ähnliches Problem wie Ihres, ich konnte es mit diesen Data type mismatch in criteria expression | Access, OleDb, C# Antworten lösen.

Kurz ausgedrückt, müssen Sie nur noch, dies zu tun:

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); 

dies die Art-Mismatches lösen sollte ...

+0

Danke chiffre arbeitete wie ein Charme –

0

Ich denke, Sie müssen sql verwenden, um beide Daten zu vergleichen.

Und ich denke, Sie haben das Zitat für das Datum aus dem Textfeld weggelassen.

siehe eine leicht modifizierte Version Ihres Codes unten.

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; 

Ich hoffe, das hilft.

+0

versuchte es zunächst scartag, aber ich hatte eine Mismatch-Ausnahme aus dem –

Verwandte Themen