Problème lors de l’insertion de DateTime dans Access avec OleDb

J’obtiens l’erreur «incompatibilité de type de données dans l’expression de critères» lors d’une tentative d’insertion d’une ligne de données dans Access Après avoir déconné un peu, je l’ai réduit au DateTime étant le problème.

Voici mon code:

class ABGDA { private OleDbConnection dbConn; private OleDbCommand dbCmd; private OleDbDataReader dbReader; private ssortingng sConnection; private ssortingng sql; private ABG abg; public void insertProgressNotes(ABG ABG) { abg = ABG; sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=SimEMR.accdb"; dbConn = new OleDbConnection(sConnection); dbConn.Open(); sql = "INSERT INTO ABG (AccountNo, LabDate, PAO2, PACO2, SAO2, Bicarbonate, BaseExcess, " + "O2Setting, SetRate, SetPEEP, FiO2) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; dbCmd = new OleDbCommand(); dbCmd.CommandText = sql; dbCmd.Connection = dbConn; dbCmd.Parameters.Add("AccountNo", OleDbType.Integer).Value = abg.AccountNo; dbCmd.Parameters.Add("LabDate", OleDbType.DBTimeStamp).Value = abg.LabDate; dbCmd.Parameters.Add("PAO2", OleDbType.Double).Value = abg.PAO2; dbCmd.Parameters.Add("PACO2", OleDbType.Double).Value = abg.PACO2; dbCmd.Parameters.Add("SAO2", OleDbType.Double).Value = abg.SAO2; dbCmd.Parameters.Add("Bicarbonate", OleDbType.Double).Value = abg.Bicarbonate; dbCmd.Parameters.Add("BaseExcess", OleDbType.Double).Value = abg.BaseExcess; dbCmd.Parameters.Add("O2Setting", OleDbType.Char).Value = abg.O2Setting; dbCmd.Parameters.Add("SetRate", OleDbType.Double).Value = abg.SetRate; dbCmd.Parameters.Add("SetPEEP", OleDbType.Double).Value = abg.SetPeep; dbCmd.Parameters.Add("FiO2", OleDbType.Double).Value = abg.FiO2; dbCmd.ExecuteNonQuery(); dbConn.Close(); } } 

abg.LabDate a été obtenu avec DateTime.Now

Ce qui est étrange, c’est que j’ai utilisé DBTimeStamp dans une autre classe pour une instruction d’insertion et que j’ai semblé bien fonctionner. Quelqu’un at-il une idée de ce que mon problème pourrait être?

MISE À JOUR: Il semble que j’ai trouvé une solution et je ne sais pas pourquoi cela a fonctionné. J’ai remplacé abg.LabDate par une chaîne et sauvegardé la date et l’heure actuelles.

 abg.LabDate = DateTime.Now.ToSsortingng(); 

Puis, quand je vais l’insérer dans la firebase database, je l’ai analysé dans un DateTime et cela a fonctionné …

 dbCmd.Parameters.Add("LabDate", OleDbType.DBTimeStamp).Value = DateTime.Parse(abg.LabDate); 

Je pense que l’erreur est due à la partie millisecondes présente dans votre DateTime qui ne sera pas traitée par Access. Vous pouvez donc tronquer la partie millisecondes et essayer l’insertion ou, dans le cas où sa seule DateTime.Now utilise la fonction équivalente Now() dans access.

 insert into table1 (datecolumn) values (Now()) // Date() if not interestd in the time part 

Je sais que cette question est ancienne. Mais je viens de relier à cela lorsque vous travaillez avec les bases de données Access et MS SQL. Le champ dans Access était de type Date / Time et dans MSSQL de type Datetime.

Ma solution est d’utiliser OleDbType.Date

  dbCmd.Parameters.Add("LabDate", OleDbType.Date).Value = DateTime.Now; 
 OleDbConnection con = new OleDbConnection(); con.ConnectionSsortingng = "provider = microsoft.ace.oledb.12.0;data source = E:\\Sohkidatabase\\Sohki.accdb"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = @"INSERT INTO Challan_No(challan,goods,quantity,nwlm,rate,total,ident,taaff,dateissue,nature,factory,expected,palce,date)VALUES (" + labelchallan.Text + ",'" + textGood.Text + "'," + combQuit.Text + "," + combNwlm.Text + "," + textRate.Text + "," + textvalu.Text + ",'" + textIdent.Text + "','" + texttfclass.Text + "','" + dateTimeIssue.Text + "','" + textNatup.Text + "','" + textFact.Text + "','" + textExpDu.Text + "','" + textPlace.Text + "','" + dateTimeDate.Text + "')"; cmd.Connection = con; con.Open(); cmd.ExecuteNonQuery(); System.Windows.Forms.MessageBox.Show("Recrod Succefully Created"); con.Close();