[ 
http://issues.apache.org/jira/browse/IBATISNET-165?page=comments#action_12417850
 ] 

Oddur Magnusson commented on IBATISNET-165:
-------------------------------------------

But when you don't have the option of changing your stored procedures, that's 
not a viable option. 

I suggest adding a useReturnValue boolean attribute to the <procedure> tag that 
tells ExecuteInsert if it should get the generatedKey from the return value:

<procedure id="CreateStuff" parameterMap="Stuff" resultClass="int" 
useReturnValue="true">CreateStuff</procedure>

and in ExecuteInsert in MappedStatement.cs check if we want to use the return 
value:

if (_statement is Insert)
                                {
                                        command.ExecuteNonQuery();
                                }
        
                                else if (_statement is Procedure && 
((Procedure) _statement).UseReturnValue)
                {
                    IDataParameter rvp = command.CreateParameter ( );
                    rvp.Direction = ParameterDirection.ReturnValue;
                    command.Parameters.Add ( rvp );
                    command.ExecuteNonQuery ( );
                    generatedKey = rvp.Value ;
                    if ( ( _statement.ResultClass != null ) &&
                        _sqlMap.TypeHandlerFactory.IsSimpleType ( 
_statement.ResultClass ) )
                    {
                        ITypeHandler typeHandler = 
_sqlMap.TypeHandlerFactory.GetTypeHandler ( _statement.ResultClass );
                        generatedKey = typeHandler.GetDataBaseValue ( 
generatedKey, _statement.ResultClass );
                    }
                                }
                            else
                                {

I've implemented this for our current usage of ibatis. I'm attaching the pathes 
we did to this issue.

> Getting return value generatedKeys from stored procedures in inserts
> --------------------------------------------------------------------
>
>          Key: IBATISNET-165
>          URL: http://issues.apache.org/jira/browse/IBATISNET-165
>      Project: iBatis for .NET
>         Type: Improvement

>   Components: DataMapper
>     Versions: DataAccess 1.5
>  Environment: .net framework 2.0
>     Reporter: Oddur Magnusson
>  Attachments: MappedStatement.cs.patch, procedure.cs.patch
>
> When calling a stored procedure that does a insert and returns the row 
> idendity in a return statement, like
> CREATE PROCEDURE [dbo].[DoFoo]  @foo int AS
> INSERT INTO Foos (foo) VALUES (@foo)
> RETURN @@IDENTITY
> there is no way of accessing the return value and returning it as the 
> generatedKey

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to