在Nhibernate中执行sql语句

在Nhibernate中执行sql语句,如果不将查询后的结果转换成对象类型,在绑定datagrid等数据源的时候就会出现问题,具体做法如下:
执行sql语句函数(query表示sql查询语句,tablename也可以理解为表名,但实际的作用是映射到相对应的实体类):
   
 1private IList ExecuteSQL( string query,string tablename) 
 2        {
 3            IList result = new ArrayList();
 4            ISessionFactoryImplementor s = (ISessionFactoryImplementor)_cfg.BuildSessionFactory();
 5            IDbCommand cmd = s.ConnectionProvider.Driver.CreateCommand();
 6            cmd.CommandText = query;
 7            IDbConnection conn = s.OpenConnection();
 8            try 
 9            {
10                cmd.Connection = conn;
11                IDataReader rs = cmd.ExecuteReader();
12                int j = 0 ;
13                while ( rs.Read() ) 
14                {
15                    int fieldCount = rs.FieldCount;
16                    object[] values = new Object[ fieldCount ];
17                    for ( int i = 0; i < fieldCount; i ++ )
18                        values[i] = rs.GetValue(i);
19                    chooseEntity(result,tablename,values);
20                }

21            }

22            finally 
23            {
24                s.CloseConnection(conn);
25            }

26            return result;
27        }

在以上的代码中,函数chooseEntity就是对查询的结的转换,如下:
    
 1private void chooseEntity(IList result,string tablename,object[] values)
 2        {
 3            switch(tablename)
 4            {
 5                case "tbl_b_AcceptConiteminfo":
 6                    AcceptConIteminfo accConitem = new AcceptConIteminfo(values);
 7                    result.Add( accConitem );
 8                    break;
 9            }

10        }

在实际类的构造函数中,将数组values的值赋值到实体类中,如下:
    
实体类实例
ok,经过以上的处理,可以直接用来绑定数据源,当然,这样处理有不好的地方,只不过也给出了一个解决问题的方法。
 
posted @ 2006-07-08 15:38  独孤求败  阅读(3553)  评论(1编辑  收藏  举报