2013-11-07 8 views
0

Как создать надежный скрипт datamapper в xml, если в целевой хранимой процедуре добавлены некоторые параметры, но действительно с значениями по умолчанию?ibatis datamapper скрипты хранимой процедуры с некоторыми параметрами по умолчанию

Например, я разработал хранимую процедуру с некоторыми параметрами по умолчанию, как это,

CREATE PROCEDURE [dbo].[SP_Test_1] 
    @mode int = 1 -- skippable 
AS 
RETURN 1 

MyBatis DataMapper в XML, как это,

<procedure id="myDBService.exeSPTest1"> 
    SP_Test_1 
</procedure> 

Так я назвал это заявление,

IList<myStruct> list = myDataSource.QueryForList<myStruct>("myDBService.exeSPTest1", null); 

Но всегда получалось такие ошибки,

[ArgumentOutOfRangeException: index] 
    IBatisNet.DataMapper.Configuration.ParameterMapping.ParameterPropertyCollection.get_Item(Int32 index) +88 
    IBatisNet.DataMapper.Configuration.ParameterMapping.ParameterMap.GetProperty(Int32 index) +76 
    IBatisNet.DataMapper.Commands.DefaultPreparedCommand.ApplyParameterMap(ISqlMapSession session, IDbCommand command, RequestScope request, IStatement statement, Object parameterObject) +395 
    IBatisNet.DataMapper.Commands.DefaultPreparedCommand.Create(RequestScope request, ISqlMapSession session, IStatement statement, Object parameterObject) +439 
    IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList(ISqlMapSession session, Object parameterObject) +125 
    IBatisNet.DataMapper.SqlMapper.QueryForList(String statementName, Object parameterObject) +251 

, пока я не дал parameterMap тег, а затем работает,

<procedure id="myDBService.exeSPTest1" parameterMap="myDBService.params-exeSPTest1"> 
    SP_Test_1 
</procedure> 

<parameterMap id="myDBService.params-exeSPTest1" class="Hashtable"> 
    <parameter column="mode" property="mode" dbType="int" type="int" /> 
</parameterMap> 

Hashtable ht = new Hashtable(); 
ht.Add("mode", 1); 
IList<myStruct> list = myDataSource.QueryForList<myStruct>("myDBService.exeSPTest1", ht); 

Хотя он работал после этого, я на самом деле хочу, гибкие параметры, введенные множеством вызовов процедур. Например, в том же порядке, что я могу сделать это иметь мульти параметры без изменения каких-либо передний уровневую код, как это,

CREATE PROCEDURE [dbo].[SP_Test_1] 
    @mode int = 1, -- skippable 
    @reserved int = 1 -- used in the future, still skippable 
AS 
RETURN 1 

Дело в том, не изменяются и параметры кода или XML переднего уровня, если добавить пропускаемые параметры в хранимой процедуре. Любая идея будет оценена по достоинству. Спасибо.

ответ

0

Я думаю, у меня есть идея от this page.

, например,

<statement id="myDBService.exeSPTest1" parameterClass="myDBService.params-exeSPTest1" > 
<dynamic> 
    // EXEC SP_Test_1 @mode = #mode# 
    // or 
    // EXEC SP_Test_1 
    // as ur wish 
</dynamic> 
</statement> 

Теперь он может работать с SP с любым числом параметров по умолчанию.

 Смежные вопросы

  • Нет связанных вопросов^_^