尝试在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);
答案 0 :(得分:7)
我认为错误是由于您DateTime
中存在的毫秒部分将不会被Access处理,因此要么截断毫秒部分并尝试插入,要么只有DateTime.Now
然后在访问中使用等效的Now()
函数。
insert into table1 (datecolumn) values (Now()) // Date() if not interested in the time part
答案 1 :(得分:3)
我知道这个问题已经过时了。但是,当我使用Access和MS SQL数据库时,我只是与此相关。 Access中的字段是日期/时间类型,在日期时间类型的MSSQL中。
我的解决方案是使用OleDbType.Date
dbCmd.Parameters.Add("LabDate", OleDbType.Date).Value = DateTime.Now;
答案 2 :(得分:-1)
<style name="Base.Widget.Design.TabLayout" parent="android:Widget">
<item name="tabBackground">@drawable/tab_background</item>
<item name="tabIndicatorColor">@color/colorAccent</item>
<item name="tabIndicatorHeight">3dp</item>
</style>