public new StoredProcedureResult Execute() { base.Execute(); var rez = new StoredProcedureResult(); rez.ReturnValue = _return.Value.ConvertTo<int>(); foreach (var p in _output) { //first char of parameter name is db specific param naming rez.OutputValues[p.ParameterName.Substring(1)] = p.Value; } return rez; }
public new StoredProcedureResult Execute() { base.Execute(); var rez = new StoredProcedureResult(); rez.ReturnValue = _return.Value.ConvertTo <int>(); foreach (var p in _output) { //first char of parameter name is db specific param naming rez.OutputValues[p.ParameterName.Substring(1)] = p.Value; } return(rez); }
/// <summary> /// Executes sproc /// </summary> /// <param name="cnx"></param> /// <param name="sprocName"></param> /// <param name="arguments">Arguments as an anonymous object, output parameters names must be prefixed with _ </param> /// <example> /// ExecuteStoredProcedure("sprocName",new{Id=1,_OutValue=""}) /// </example> /// <returns></returns> public static StoredProcedureResult ExecuteStoredProcedure(this DbConnection cnx, string sprocName, object arguments) { using (var cmd = cnx.CreateCommand()) { var output = new List <IDbDataParameter>(); sprocName.MustNotBeEmpty(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = sprocName; var provider = cnx.GetProvider(); var paramDict = PrepareStatement.CreateParamsDictionary(arguments); var allp = cmd.Parameters; IDbDataParameter p = null; p = cmd.CreateParameter(); provider.SetupParameter(p, "ReturnValue", 0); allp.Add(p); var returnParam = p; p.Direction = ParameterDirection.ReturnValue; foreach (var kv in paramDict) { p = cmd.CreateParameter(); var pname = kv.Key; if (kv.Key.StartsWith("_")) { pname = kv.Key.Substring(1); p.Direction = ParameterDirection.Output; } provider.SetupParameter(p, pname, kv.Value); allp.Add(p); output.Add(p); } cmd.Execute(); var rez = new StoredProcedureResult(); rez.ReturnValue = returnParam.Value.ConvertTo <int>(); foreach (var param in output) { //first char of parameter name is db specific param prefix rez.OutputValues[param.ParameterName.Substring(1)] = param.Value; } return(rez); } }