private DbParameter[] DiscoverSpParameterSet(string strProcedureName, bool includeReturnValueParameter)
{
DbCommand dbCommand = new DbCommand();
dbCommand.Connection = mConn;
dbCommand.CommandText = strProcedureName;
dbCommand.CommandType = CommandType.StoredProcedure;
try
{
if (mConn.State == ConnectionState.Closed)
{
mConn.Open();
}
// 查找存储过程的参数
DbCommandBuilder.DeriveParameters(dbCommand);
// 如果包含返回Result value参数(自动生成的,不需要传进去),如果有,则删除
// Oracle中,function产生此参数,procedure则不产生
// SQL SERVER中,procedure 产生此参数,function 未测试,应该也会有
if (includeReturnValueParameter)
{
dbCommand.Parameters.RemoveAt(0);
}
// 返回找到的参数的副本
DbParameter[] discoveredParameters = new DbParameter[dbCommand.Parameters.Count];
dbCommand.Parameters.CopyTo(discoveredParameters, 0);
// 参数一刀两断,没有关系了.
dbCommand.Parameters.Clear();
// 初始化各参数为DBNull
foreach (DbParameter discoveredParameter in discoveredParameters)
{
discoveredParameter.Value = DBNull.Value;
}
return(discoveredParameters);
}
catch (Exception e)
{
WriteLogInfo("error on " + this.GetType().Name + " GetStoredProcedureParamters:" + strProcedureName + "\r\n" + e.Message);
return(null);
}
}