Excel Jet OLE DB: Einfügen eines DateTime-Wert

OLEDB verwendet werden können, um Lesen und schreiben von Excel-sheets. Betrachten Sie den folgenden code Beispiel:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\my\\excel\\file.xls;Extended Properties='Excel 8.0;HDR=Yes'")) {
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] datetime)", conn);
    cmd.ExecuteNonQuery();
    cmd = new OleDbCommand("INSERT INTO Sheet1 VALUES (@mydate)", conn);
    cmd.Parameters.AddWithValue("@mydate", DateTime.Now.Date);
    cmd.ExecuteNonQuery();
}

Dieser funktioniert einwandfrei in Ordnung. Einfügen von zahlen, text, etc. funktioniert auch gut. Jedoch, einfügen eines Wertes mit einer Komponente ausfällt:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\my\\excel\\file.xls;Extended Properties='Excel 8.0;HDR=Yes'")) {
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] datetime)", conn);
    cmd.ExecuteNonQuery();
    cmd = new OleDbCommand("INSERT INTO Sheet1 VALUES (@mydate)", conn);
    cmd.Parameters.AddWithValue("@mydate", DateTime.Now); //<-- note the difference here
    cmd.ExecuteNonQuery();
}

Ausführen, schlägt das EINFÜGEN fehl mit eine OleDbException: Data type mismatch in criteria expression.

Ist dies ein bekannter bug? Wenn ja, was kann getan werden, um Abhilfe es? Ich habe eine Lösung gefunden, die funktioniert:

cmd = new OleDbCommand(String.Format(@"INSERT INTO Sheet1 VALUES (#{0:dd\/MM\/yyyy HH:mm:ss}#)", DateTime.Now), conn);

Es schafft im Grunde eine SQL-Anweisung, die wie folgt aussieht: INSERT INTO Sheet1 VALUES (#05/29/2011 13:12:01#). Natürlich, ich habe nicht, Ihnen zu sagen, wie hässlich das ist. Ich würde viel lieber eine Lösung über eine parametrisierte Abfrage.

  • In der Vergangenheit habe ich nicht die Mühe mit ihm, und nur eingefügt DateTime.Nun.ToString().
InformationsquelleAutor Heinzi | 2011-06-06
Schreibe einen Kommentar