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
>>
>
>

Reply via email to