При попытке вставить строку данных в 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.* Странная вещь в том, что я использовал DBTimeStamp в другом классе для оператора вставки, и это, похоже, работало просто отлично.Кто-нибудь имеет представление о том, что моя проблема может быть?
ОБНОВЛЕНИЕ: Кажется, я нашел решение, и я понятия не имею, почему это сработало.Я изменил abg.LabDate на строку и сохранил текущую дату / время.
abg.LabDate = DateTime.Now.ToString();
Затем, когда я собираюсь вставить его в базу данных, я проанализировал его обратно в DateTime, и это сработало ...
dbCmd.Parameters.Add("LabDate", OleDbType.DBTimeStamp).Value = DateTime.Parse(abg.LabDate);