执行存储过程的方法

来源:互联网 发布:白百合 知乎 编辑:程序博客网 时间:2024/05/01 16:55
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;