Off the top of my head. You could specify the result map and define the datatype. That should work just fine.
<resultMap id="Foo-result" class="Foo"> <result property="d" column="d" type="double"/> </result> <statements> <select id="getFoo" resultMap="Foo-result"> SELECT 1.2345 as d </select> </statements> </sqlMap> On Fri, May 8, 2009 at 1:42 PM, Christopher DeGuise < christopher.degu...@be-pragmatic.com> wrote: > I think (at first inspection) is that you are using a resultClass of "Foo". > Change the statement to return the primitive type "double" as the > resultClass. The exception is indicating a cast of double->Foo is not valid. > > Chris > > > On Fri, May 8, 2009 at 9:27 AM, Martin Wickman <martin.wick...@dapresy.com > > wrote: > >> Hello >> >> I get "System.InvalidCastException: Specified cast is not valid" and the >> following stacktrace: >> >> at System.Data.SqlClient.SqlBuffer.get_Double() >> at System.Data.SqlClient.SqlDataReader.GetDouble(Int32 i) >> at >> IBatisNet.DataMapper.Commands.DataReaderDecorator.System.Data.IDataRecord.GetDouble(Int32 >> i) >> at >> IBatisNet.DataMapper.TypeHandlers.DoubleTypeHandler.GetValueByIndex(ResultProperty >> mapping, IDataReader dataReader) >> at >> IBatisNet.DataMapper.Configuration.ResultMapping.ResultProperty.GetDataBaseValue(IDataReader >> dataReader) >> at >> IBatisNet.DataMapper.MappedStatements.ResultStrategy.AutoMapStrategy.Process(RequestScope >> request, IDataReader& reader, Object resultObject) >> at >> IBatisNet.DataMapper.MappedStatements.ResultStrategy.ResultClassStrategy.Process(RequestScope >> request, IDataReader& reader, Object resultObject) >> at >> IBatisNet.DataMapper.MappedStatements.MappedStatement.RunQueryForList[T](RequestScope >> request, ISqlMapSession session, Object parameterObject, IList`1 >> resultObject, RowDelegate`1 rowDelegate) >> at >> IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList[T](ISqlMapSession >> session, Object parameterObject) >> at IBatisNet.DataMapper.SqlMapper.QueryForList[T](String statementName, >> Object parameterObject) >> at Dapresy.RefDB.ServiceLibrary.DB.FooHelper.select() in >> C:\...\DB\FooHelper.cs:line 11 >> at UnitTests.AttributesTest.foo() in >> C:\...\UnitTests\AttributesTest.cs:line 79 >> >> This is a simple as I could make the test case: >> >> Foo.xml (the sqlMap): >> >> <?xml version="1.0" encoding="UTF-8" ?> >> <sqlMap >> namespace="Foo" >> xmlns="http://ibatis.apache.org/mapping" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xsi:noNamespaceSchemaLocation="../iBatis/SqlMap.xsd"> >> >> <statements> >> <select id="getFoo" resultClass="Foo"> >> SELECT 1.2345 as d >> </select> >> </statements> >> </sqlMap> >> >> Foo.cs (the test class): >> >> public class Foo >> { >> public double d = 0.0; >> } >> >> mapper().QueryForList<Foo>("getFoo", null); >> >> As you see, this is an extremely simple example and it should of course >> work. If I change the 'd' property to and int or string or whatever, it >> works. This is the first time I used doubles with iBats. But using 'float' >> or 'double' gives this error! >> >> Using iBatis .NET 1.6.[12] and SQL Server2.0. >> >> /Martin >> > >