Skip to content

Commit d247eb0

Browse files
committed
Mark, added one more change to ProcedureExecutor. I added the ability for the parameters to be case insensive. I have worked with dbas in the past who would change the case of the parameters without concern for code impact.
2 parents 355f0bb + 1376bd0 commit d247eb0

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

Simple.Data.Ado/ProcedureExecutor.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,21 +100,27 @@ private static void SetParameters(Procedure procedure, IDbCommand cmd, IDictiona
100100
AddReturnParameter(cmd);
101101

102102
int i = 0;
103+
103104
foreach (var parameter in procedure.Parameters.Where(p => p.Direction != ParameterDirection.ReturnValue))
104105
{
105-
object value;
106-
if (!suppliedParameters.TryGetValue(parameter.Name.Replace("@", ""), out value))
107-
{
108-
suppliedParameters.TryGetValue("_" + i, out value);
109-
}
110-
111-
var cmdParameter = cmd.AddParameter(parameter.Name, value);
106+
//Tim Cartwright: Allows for case insensive parameters
107+
var value = suppliedParameters.FirstOrDefault(sp =>
108+
sp.Key.Equals(parameter.Name.Replace("@", ""), StringComparison.InvariantCultureIgnoreCase)
109+
|| sp.Key.Equals("_" + i++)
110+
);
111+
var cmdParameter = cmd.CreateParameter();
112+
//Tim Cartwright: Using AddParameter does not allow for the "default" keyword to ever be passed into
113+
// parameters in stored procedures with defualt values. Null is always sent in. This will allow for default
114+
// values to work properly. Not sure why this is so, in both cases the value gets set. Just is.
115+
//var cmdParameter = cmd.AddParameter(parameter.Name, value);
116+
cmdParameter.ParameterName = parameter.Name;
117+
cmdParameter.Value = value.Value;
112118
cmdParameter.Direction = parameter.Direction;
113119
//Tim Cartwright: I added size and dbtype so inout/out params would function properly.
114120
//not setting the proper dbtype and size with out put parameters causes the exception: "Size property has an invalid size of 0"
115121
cmdParameter.DbType = parameter.Dbtype;
116122
cmdParameter.Size = parameter.Size;
117-
i++;
123+
cmd.Parameters.Add(cmdParameter);
118124
}
119125
}
120126

0 commit comments

Comments
 (0)