public IList ExecuteStoredProc( string spName, ICollection paramInfos ) {
IList result = new ArrayList();
ISessionFactoryImplementor s = (ISessionFactoryImplementor)cfg.BuildSessionFactory();
IDbCommand cmd = s.ConnectionProvider.Driver.CreateCommand();
cmd.CommandText = spName;
cmd.CommandType = CommandType.StoredProcedure;
// 加入参数
if ( paramInfos != null ) {
foreach( ParamInfo info in paramInfos ) {
IDbDataParameter parameter = cmd.CreateParameter();
parameter.ParameterName = info.name; // driver.FormatNameForSql( info.Name );
parameter.Value = info.Value;
cmd.Parameters.Add( parameter );
}
}
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;
}
其中ParamInfo为存储参数信息的结构, 定义如下:
public struct ParamInfo {
public string Name;
public object Value;
}