天天看點

執行存儲過程的方法

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;