Pourquoi est-ce que j'obtiens « Incompatibilité de type de données dans l'expression des critères » avec ce code ?[dupliquer]

StackOverflow https://stackoverflow.com//questions/22078830

Question

J'essaie d'insérer un enregistrement dans une table MS Access avec ce code :

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

... mais le "cmd.executenonQuery ();" La ligne souffle avec:

System.data.oledb.oledBException a été non géré par le code utilisateur Message = Dona Type Calmatch dans l'expression des critères.Source = Microsoft Office Access Database Moteur StackTrace:at system.data.oledb.oledbcommand.execUtecommandTexterrorHandling (Oledbhresult HR) à System.Data.oledb.oledbcommand.executeCommandTextForsinglereSult (TagdbParams dbParams, objet & exécutERESULT à System.data. Oledb.oledbcommand.execUtecommand (CommandBehavior Behavior, objet et exécutoire) à System.Data.oledb.oledbcommand.executeRererinternal (Commandbehavior Method) at system.data.oledb.oledbcommand.exetenquery ()

Je suppose que le problème vient de la seule valeur DateTime, mais quel est le problème avec :

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

?

Je passe "DateTime.Now" comme argument collect_dttm.

Était-ce utile?

La solution

Le lien fourni montre au moins deux correctifs pour cela ;J'ai trouvé que le plus simple consistait simplement à supprimer le paramètre DateTime du mix et à injecter directement la valeur dateTime à partir de l'instruction Insert en remplaçant le paramètre "DTNow" par un appel à "Now()" comme ceci :

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)";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top