[
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