La difficulté à l'insérer DateTime dans l'Accès avec OleDb

- Je obtenir le "type de données incompatible dans l'expression des critères" d'erreur lorsque vous essayez d'insérer une ligne de données dans Access. Après de déconner un peu, j'ai rétréci vers le bas à l'DateTime être le problème.

Voici mon code:

class ABGDA
{
private OleDbConnection dbConn;
private OleDbCommand dbCmd;
private OleDbDataReader dbReader;
private string sConnection;
private string 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é obtenue à l'aide de DateTime.Maintenant

La chose étrange est que j'ai utilisé DBTimeStamp dans une autre classe pour une instruction insert et que semblait très bien fonctionner. Quelqu'un aurait-il une idée sur ce que mon problème peut-être?

Mise à JOUR: Il semble que j'ai trouvé une solution, et je n'ai aucune idée de pourquoi ça a fonctionné. J'ai changé de dga.LabDate à une chaîne et sauvé la date/heure actuelle.

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

Puis quand je vais pour l'insérer dans la base de données, j'ai analysé de nouveau à un DateTime et ça a fonctionné...

dbCmd.Parameters.Add("LabDate", OleDbType.DBTimeStamp).Value = DateTime.Parse(abg.LabDate);
Pouvez-vous faire une impression sur le SQL à partir de votre instruction insert...le SQL généré par votre code juste avant, il est transmis à la DB? Votre date peut juste besoin d'être entouré par octothorpes (AKA livre ou de numéro de signe)
comment dois-je faire? Quand j'ai passez la souris sur dbCmd.CommandText, il reste juste montre la chaîne initiale-je configurer
votre LabDate aurait millisecondes, ce qui je pense ne sera pas traitée par l'accès, essayez donc d'en tronquant la partie.
J'espère que vous n'allez pas courir dans les paramètres régionaux des problèmes, aussi souvent que vous allez vous retrouver avec les dates ambiguës, dont l'Accès décidera devrait être l'Amérique. Si LabDate est toujours Maintenant(), pourquoi ne pas définir la valeur par défaut dans la table de Maintenant() et de laisser de la date de la mise à jour?
stackoverflow.com/questions/1004698/...

OriginalL'auteur athom | 2012-03-02