[IBatisNet]关于返回DataTable的一点问题

      对于IBatisnet执行查询返回DataTable,网上有很多代码,下面简单列出一下:

 

private IDbCommand GetDbCommand(string statementName, object paramObject)
        
{
            IStatement statement 
= sqlMap.GetMappedStatement(statementName).Statement;

            IMappedStatement mapStatement 
= sqlMap.GetMappedStatement(statementName);

            IDalSession session 
= new SqlMapSession(sqlMap);

            
if (sqlMap.LocalSession != null)
            
{
                session 
= sqlMap.LocalSession;
            }

            
else
            
{
                session 
= sqlMap.OpenConnection();
            }


            RequestScope request 
= statement.Sql.GetRequestScope(mapStatement, paramObject, session);

            mapStatement.PreparedCommand.Create(request, session, statement, paramObject);

            
return request.IDbCommand;

        }



        
/// <summary>
        
/// 通用的以DataTable的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)
        
/// </summary>
        
/// <param name="statementName">语句ID</param>
        
/// <param name="paramObject">语句所需要的参数</param>
        
/// <returns>得到的DataTable</returns>

        protected DataTable ExecuteQueryForDataTable(string statementName, object paramObject)
        
{
            DataSet ds 
= new DataSet();
            
bool isSessionLocal = false;
            IDalSession session 
= sqlMap.LocalSession;
            
if (session == null)
            
{
                session 
= new SqlMapSession(sqlMap);
                session.OpenConnection();
                isSessionLocal 
= true;
            }


            IDbCommand cmd 
= GetDbCommand(statementName, paramObject);

            
try
            
{
                cmd.Connection 
= session.Connection;
                IDbDataAdapter adapter 
= session.CreateDataAdapter(cmd);
                adapter.Fill(ds);
            }

            
finally
            
{
                
if (isSessionLocal)
                
{
                    session.CloseConnection();
                }

            }


            
return ds.Tables[0];

        }


理论上来说是没任何问题的,但前几天我做了有Output参数的存储过程来返回DataTable,如果用上面的ExecuteQueryForDataTable方法就会获得不到Output的参数,因为它在返回值的时候没有用到IBatisNet内部的方法了,所以上面的方法严谨的写法应该改成下面这样:

/// <summary>
        
/// 通用的以DataTable的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)
        
/// </summary>
        
/// <param name="statementName">语句ID</param>
        
/// <param name="paramObject">语句所需要的参数</param>
    
/// <param name="htOutPutParameter)">Output参数值哈希表</param>
        
/// <returns>得到的DataTable</returns>

        protected DataTable ExecuteQueryForDataTable(string statementName, object paramObject, out Hashtable htOutPutParameter)
        
{
            DataSet ds 
= new DataSet();
            
bool isSessionLocal = false;
            IDalSession session 
= sqlMap.LocalSession;
            
if (session == null)
            
{
                session 
= new SqlMapSession(sqlMap);
                session.OpenConnection();
                isSessionLocal 
= true;
            }


            IDbCommand cmd 
= GetDbCommand(statementName, paramObject);

            
try
            
{
                cmd.Connection 
= session.Connection;
                IDbDataAdapter adapter 
= session.CreateDataAdapter(cmd);
                adapter.Fill(ds);
            }

            
finally
            
{
                
if (isSessionLocal)
                
{
                    session.CloseConnection();
                }

            }


            
foreach (IDataParameter parameter in cmd.Parameters)
            
{
                
if (parameter.Direction == ParameterDirection.Output)
                
{
                    htOutPutParameter[parameter.ParameterName] 
= parameter.Value;
                }

            }


            
return ds.Tables[0];

        }

posted on 2007-02-05 19:04 Daniel Pang 阅读(1658) 评论(4)  编辑 收藏 网摘 所属分类: IBatisNet




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

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

0 641054




相关文章:

相关链接:
<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

导航

统计

公告

技术交流平台,真诚的希望能和园子里的朋友交流技术,共同进步!
欢迎加入Castle+IBatisNet交流群:2923364(已满),37745404
特别提示:本站文章若无特别申明,均为原创,转载请注明出自'博客园'!
Emailpwei013#163.com
MSNshypw520#gmail.com

与我联系

搜索

 

常用链接

留言簿

我参与的团队

随笔分类(98)

随笔档案(74)

相册

收藏夹(19)

MY BLOG

公司主页

情侣BLOG

友情链接

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜