I'm using IBatis with the OleDb provider to access an Access database. I was getting the following exception when I tried this simple update statement using a parameter class that contained a System.Boolean property named Published:
UPDATE Address SET Published = #Published# WHERE AddressID = 1 Access calls such a field a Yes/No column. Running that code resulted in this exception: OledbException 0x80040e07 Data type mismatch criteria expression It turns out that I needed to specify the type of the Published column (see the chart on page 28 of the pdf): UPDATE Address SET Published = #Published:Boolean# WHERE AddressID = 1 While that wasn't terribly difficult to figure out, I was expecting iBatis to figure out the column type for me. It seems to handle other common types correctly: dates, varchars, etc. If a ever change the provider to SQL Server (very likely) or Oracle (less likely), I'm afraid that I'll need to specify a different type based on that provider (see page 28 of the pdf manual): SQL Server (SqlDbType.Bit): UPDATE Address SET Published = #Published:Bit# WHERE AddressID = 1 Oracle (OracleType.Byte) UPDATE Address SET Published = #Published:Byte# WHERE AddressID = 1 For simple statements like that, I'd like to avoid using parameter maps and in-line parmaeters (colon notation) as much as possible to encourage sql map re-use across providers. Is expecting my original statement: UPDATE Address SET Published = #Published# WHERE AddressID = 1 to work with the OleDb provider just wishful thinking? - Ron