下面给出一个在nhibernate中执行SQL语句的方法ExecuteSQL。
public IList ExecuteSQL( string query ) ...{ IList result = new ArrayList(); ISessionFactoryImplementor s = (ISessionFactoryImplementor)cfg.BuildSessionFactory(); IDbCommand cmd = s.ConnectionProvider.Driver.CreateCommand(); cmd.CommandText = query; IDbConnection conn = s.OpenConnection(); try ...{ cmd.Connection = conn; IDataReader rs = cmd.ExecuteReader(); while ( rs.Read() ) ...{ int fieldCount = rs.FieldCount; object[] values = new Object[ fieldCount ]; for ( int i = 0; i < fieldCount; i ++ ) values[i] = rs.GetValue(i); result.Add( values ); } } finally ...{ s.CloseConnection(conn); } return result; }
返回结果与nhibernate的query的结果保存一致(返回object[]的情况)。