Frage

Ich versuche, mit diesem Code einen Datensatz in eine MS Access-Tabelle einzufügen:

public void InsertIntoPPTData(string tx, string site_no, string xmlfile, DateTime collect_dttm, string ppt_user, string tx_memo, string file_beg, string file_end)
{
    string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Duckbilled;Password=Platypus;Data Source=C:\RGT\NotSoBigData.MDB;Jet OLEDB:System database=C:\CCRWin\Data\jftfdcsc.mdw";
    using (var conn = new OleDbConnection(connStr))
    {
        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = 
                @"INSERT INTO tx_tillermantea (tx, site_no, xmlfile, collect_dttm, ppt_user, tx_memo, file_beg, file_end) 
                  VALUES(@txval, @siteNum, @xmlfileName, @DTNow, @PPTUser, @TXMemo, @strfile_beg, @strfile_end)";
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@txval", tx);
            cmd.Parameters.AddWithValue("@siteNum", site_no);
            cmd.Parameters.AddWithValue("@xmlfileName", xmlfile);
            cmd.Parameters.AddWithValue("@DTNow", collect_dttm);
            cmd.Parameters.AddWithValue("@PPTUser", ppt_user);
            cmd.Parameters.AddWithValue("@TXMemo", tx_memo);
            cmd.Parameters.AddWithValue("@strfile_beg", file_beg);
            cmd.Parameters.AddWithValue("@strfile_end", file_end);
            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

... aber der "cmd.executenonQuery ();" Linie bläst mit:

System.data.oledb.oledBexception wurde durch Benutzercode -Nachricht = Datentyp -Nichtübereinstimmung in der Kriterienausdruck nicht behandelt.Source = Microsoft Office Access Database Engine Stacktrace:bei System.data.oledb.oledbcommand.executecommandtexterrorHandling (OLEDBHRESULT HR) AT SYSTEM.DATA.OLEDB.OLEDBCommand.executeCommandtextForsingleresult (TagdbParams dbParams, Objekte und Explosionen, Objekte und Explosionen). Uteresult) bei System.data. OLEDB.OLEDBCOMMAND.EXECUTECOMMAND (COMMANDBEHAVIOR ABSITÄT, Objekt & Executeresult) at system.data.oledb.oledbcommand.executereAninternal (commandBehavior -Verhalten, String -Methode) bei System.data.oledb.oledbcommand.exectenOnony () ()) ().

Ich vermute, dass das Problem der einzelne DateTime-Wert ist, aber was ist falsch daran:

cmd.Parameters.AddWithValue("@DTNow", collect_dttm);

?

Ich übergebe „DateTime.Now“ als „collect_dttm“-Argument.

War es hilfreich?

Lösung

Der bereitgestellte Link zeigt mindestens zwei Korrekturen hierfür;Am einfachsten fand ich es, einfach den DateTime-Parameter aus der Mischung zu entfernen und den dateTime-Wert direkt aus der Insert-Anweisung einzufügen, indem der Parameter „DTNow“ durch einen Aufruf von „Now()“ wie folgt ersetzt wird:

cmd.CommandText = 
    @"INSERT INTO tx_tillermantea (tx, site_no, xmlfile, collect_dttm, ppt_user, tx_memo, file_beg, file_end) 
      VALUES(@txval, @siteNum, @xmlfileName, Now(), @PPTUser, @TXMemo, @strfile_beg, @strfile_end)";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top