static void SetParameter(IEdmFunction func, JObject parameterValues, IEdmType edmType, SqlParameterCollection pars) { if (parameterValues == null) return; JToken token = null; Type colType = null; foreach (var p in func.Parameters) { if (parameterValues.TryGetValue(p.Name, out token)) { if (p.Type.Definition.TypeKind == EdmTypeKind.Complex) { DataTable dt = new DataTable(); var c = p.Type.AsComplex(); foreach (var item in c.StructuralProperties()) { dt.Columns.Add(item.Name, item.Type.PrimitiveKind().ToClrType()); } foreach (var item in token) { DataRow dr = dt.NewRow(); foreach (JProperty col in item) { if (!dt.Columns.Contains(col.Name)) continue; colType = dt.Columns[col.Name].DataType; if (colType == typeof(Boolean)) { dr.SetField(col.Name, col.Value.ToString() == "0" ? false : true); } else dr.SetField(col.Name, col.Value.ToString().ChangeType(colType)); } dt.Rows.Add(dr); } pars.AddWithValue(p.Name, dt); } else { if (string.IsNullOrEmpty(token.ToString())) pars.AddWithValue(p.Name, DBNull.Value); else pars.AddWithValue(p.Name, token.ToString().ChangeType(p.Type.PrimitiveKind())); } } } if (edmType.TypeKind == EdmTypeKind.Entity) { foreach (var outp in (edmType as EdmEntityType).Properties()) { if (outp.Name == "$Results") continue; if (pars.Contains(outp.Name)) { pars[outp.Name].Direction = ParameterDirection.Output; } else { pars.AddWithValue(outp.Name, DBNull.Value); } } } }
private static SqlParameterCollection ThreadSafeDetermineParms(string command, SqlParameterCollection parms, drGeneric_String_String globalInputs) { if (NonUpdatedProcedures.Instance.IsProcedureUpdated(command)) { //******* 20121029 DHB Start code changes. //if (AppSettings.GlobalInputs == null) //{ // throw new ApplicationException("The procedure " + command + " has been flagged as being updated to accept GlobalInputs but the call to FetchDataTable did not include GlobalInputs. Please modify your call. Contact Wesley or Michael for further info."); //} //******* 20121029 DHB Stop code changes. if (!parms.Contains("GlobalInputs")) { SqlParameter param = new SqlParameter("GlobalInputs", SqlDbType.Structured); param.Value = globalInputs.ToDataTable(); parms.Add(param); } return parms; } return parms; }