如果目标存储过程添加了一些参数但确实有默认值,我怎样才能在xml中创建一个健壮的datamapper脚本?
例如, 我设计了一个存储过程,其中包含一些默认参数,
CREATE PROCEDURE [dbo].[SP_Test_1]
@mode int = 1 -- skippable
AS
RETURN 1
像这样的xml中的MyBatis datamapper,
<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 :(得分: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。