IBatis.Net中为什么Output的paramMap的class设置为int就获取不到值

上篇文章解答了使用IBatis.Net获取存储过程的返回值,其中我写了一个注意必须要将paramMap的class设置为hashtable,只说了注意,没有说明具体原因,所以心里老是有个疙瘩!
于是,再看了一下DataMapper的源代码,分析如下:
当你调用

mapper.Insert("GetAccountViaSP2", testid);

就会调用MappedStatement的ExecuteInsert方法

public virtual object ExecuteInsert(IDalSession session, object parameterObject )
其中parameterObject就是你传入的参数
接着调用MappedStatement的RetrieveOutputParameters方法设置返回的参数
RetrieveOutputParameters(request, session, command, parameterObject);
RetrieveOutputParameters定义如下
private void RetrieveOutputParameters(RequestScope request, IDalSession session, IDbCommand command, object result)
在这个方法中result就是传入的testid.在这个方法里面通过
request.ParameterMap.SetOutputParameter(ref result, mapping, dataBaseValue);
将返回参数的值赋给了result。整个的数据流的过程是:
testid <--> parameterObject <--> result
但是其中就会设计到值类型和引用类型的关系了。如果是值类型,那么RetrieveOutputParameters的parameterObject就会得到不到result的值。所以就导致了我们上面的问题。

不知道这样的解释,是否清楚?!

posted @ 2006-11-04 10:00 福娃 阅读(977) 评论(11)  编辑 收藏 网摘 所属分类: IBatis.Net

  回复  引用    
#1楼 2006-11-05 17:26 | hpy223[未注册用户]
您好!
我按照您的方法调试 还是不成功,似乎您的代码有2个地方不统一,一个是
mapper.insert("GetAccountViaSP2", map);这个方法有问题,提示第二个参数不能转换为object..在上面 看代码是mapper.Insert("GetAccountViaSP2", testid); 这2个应该采用哪个呢? 如果用第二个了,那
map.Add("testParam", testid); 又有什么用呢?
还有我如果调用分页的存储过程,返回记录数 和页面总数,请问 该怎么用?
我 调用 return mapper.QueryForList("GetAccountViaSP2", map);
返回不了值,还请给以回复,谢谢!

  回复  引用  查看    
#2楼[楼主] 2006-11-06 08:16 | 福娃      
如果你想获取存储过程返回值,请看我的另外一片文章
http://www.cnblogs.com/maplye/archive/2006/11/04/549773.html">http://www.cnblogs.com/maplye/archive/2006/11/04/549773.html

这篇文章是解释为什么传int型的值就取不到返回值的原因。

  回复  引用    
#3楼 2006-12-06 20:12 | hpy223[未注册用户]
请问SqlMap.config中如何加密数据库连接串,在MappersManager 里面应该 如何解密
  回复  引用  查看    
#4楼 2006-12-07 17:26 | Daniel Phang      
@hpy223
这个问题问的好,回去研究研究

  回复  引用  查看    
#5楼[楼主] 2006-12-11 15:19 | 福娃      
我在他的官方好像没有找到配置文件加密的信息,不过,你可以使用嵌入资源文件的方式,来对数据库连接做一定的保护作用!
在sqlmap.config中将你的properties.config文件配置成
<properties embedded="Resources.properties.config, MyApp.Data" />

你可以试试看!

  回复  引用  查看    
#6楼 2006-12-11 17:37 | Daniel Phang      
@福娃
我也看了源代码,好象没有关于加密这一块

  回复  引用    
#7楼 2006-12-14 22:01 | hpy223[未注册用户]
@hpy223
这个问题问的好,回去研究研究

弄得我都不好意思了!


在sqlmap.config中将你的properties.config文件配置成
<properties embedded="Resources.properties.config, MyApp.Data" />
感觉这个办法可行,有时间了测试一下!




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 549823




相关文章:

相关链接: