Using MS's provider fixes the "null string / varchar2" bug (to recapitulate : I call an insert statement with an object with a few non null string properties, they end up as null in the DB, however int and DateTime params in the same statement get inserted fine)
I wasn't able to solve the bug by tracing the source code, But I figure it must be an iBatis bug, since the test case works with microsoft's client. Here's a few questions : - Is anyone out there using the oracle + odp.net combination ? - Is the driver used in test suite ? (I noticed most of the test code is for mysql and mssql...) Thanks <?xml version="1.0" encoding="utf-8" ?> <providers> <clear/> <provider name="oracle10g" enabled="true" assemblyName="Oracle.DataAccess, Version=10.1.0.301, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection" commandClass="Oracle.DataAccess.Client.OracleCommand" parameterClass="Oracle.DataAccess.Client.OracleParameter" parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType" parameterDbTypeProperty="OracleDbType" dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter" commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder" usePositionalParameters = "false" useParameterPrefixInSql = "true" useParameterPrefixInParameter = "false" parameterPrefix=":" /> <provider name="oracleClient1.0" description="MS Oracle provider V1.0.5" enabled="true" default="false" assemblyName="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OracleClient.OracleConnection" commandClass="System.Data.OracleClient.OracleCommand" parameterClass="System.Data.OracleClient.OracleParameter" parameterDbTypeClass="System.Data.OracleClient.OracleType" parameterDbTypeProperty="OracleType" dataAdapterClass="System.Data.OracleClient.OracleDataAdapter" commandBuilderClass="System.Data.OracleClient.OracleCommandBuilder" usePositionalParameters = "false" useParameterPrefixInSql = "true" useParameterPrefixInParameter = "false" parameterPrefix=":" /> </providers><?xml version="1.0" encoding="utf-8" ?> -----Original Message----- From: Ron Grabowski [mailto:[EMAIL PROTECTED] Sent: Thursday, April 21, 2005 3:31 PM To: ibatis-user-cs@incubator.apache.org Subject: RE: problems with param mapping, and params becoming null on oracle Do normal inserts (without the transaction) work? SqlMapper m = Mapper.get(); int id = (int)m.Insert("InsertUsager", u1); You can use an inline parameter map to tell IBatisNet what type your objects. Varchar2 referes to Orace.DataAccess.DbTypes.Varchar2 or whatever the full DbTypes namespace is for your provider. <insert id="InsertUsager" parameterClass="Usager"> Insert Into Usagers (id, nom_usager, nom, prenom) Values (UsagersSeq.nextVal, #NomUsager:Varchar2#, #Nom:Varchar2#, #Prenom:Varchar2#) </insert> Its usually not necessary to specify the type for basic things like strings. --- Maxime Levesque <[EMAIL PROTECTED]> wrote: > > Ok, using oracle's number(9) type solved the casting problem > (number(10) or bigger causes a type cast exception, which is > reasoneable) > > I still have the "strings become null", > > interestingly number(9) (c# int types), and Date (c# DateTime) > get inserted correctly, so far, oracle varchar2 (c# strings) > are problematic (they are saved as null in the DB)...