gpt4 book ai didi

c# - 使用 OleDb 将 DateTime 插入 Access 时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 22:27:48 25 4
gpt4 key购买 nike

尝试将一行数据插入 Access 时出现“条件表达式中的数据类型不匹配”错误。稍微弄乱之后,我将范围缩小到 DateTime 是问题所在。

这是我的代码:

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 是使用 DateTime.Now 获得的

奇怪的是,我在另一个类中使用了 DBTimeStamp 作为插入语句,但似乎工作正常。有谁知道我的问题可能是什么?

更新:我似乎找到了一个解决方案,但我不知道它为什么有效。我将 abg.LabDate 更改为字符串并保存了当前日期/时间。

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

然后当我将它插入数据库时​​,我将它解析回 DateTime 并且成功了......

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

最佳答案

我认为该错误是由于您的 DateTime 中存在毫秒部分,Access 不会处理该部分,因此您可以截断毫秒部分并尝试插入,或者万一它只有 DateTime.Now 然后在 Access 中使用等效的 Now() 函数。

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

关于c# - 使用 OleDb 将 DateTime 插入 Access 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9527958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com