public static SqlParameter[] GetParameterValues <T>(string procedureName, T objInfo) { DataTable dtProcedureInfo = GetProcedureInfo(procedureName); if (dtProcedureInfo.Rows.Count == 0) { throw new ArgumentException("Không tìm thấy procedure"); } SqlParameter[] sqlParameter = new SqlParameter[dtProcedureInfo.Rows.Count]; string strFieldName = ""; Dictionary <string, object> dicProperty = new Dictionary <string, object>(); Type pType = objInfo.GetType(); foreach (System.Reflection.PropertyInfo info in pType.GetProperties()) { dicProperty.Add(info.Name, info.GetValue(objInfo, null)); } object objO = new object(); for (int i = 0; i < dtProcedureInfo.Rows.Count; i++) { try { strFieldName = dtProcedureInfo.Rows[i]["PARAMETER_NAME"].ToString().Trim(); strFieldName = strFieldName.Replace("@", ""); sqlParameter[i] = new SqlParameter(dtProcedureInfo.Rows[i]["PARAMETER_NAME"].ToString(), Null.GetNull(dicProperty[strFieldName], DBNull.Value)); if (dtProcedureInfo.Rows[i]["DATA_TYPE"].ToString().Equals("image") == true) { sqlParameter[i].SqlDbType = SqlDbType.Image; } } catch (Exception ex) { throw new System.ArgumentException("Trường gây lỗi: " + strFieldName + " :" + ex.Message); } } return(sqlParameter); }
/// <summary> /// Hàm này dùng để map các tham số /// </summary> /// <param name="procedureName"></param> /// <param name="sqlParameter"></param> /// <param name="parameterValues"></param> private static void AssignParameterValues(string procedureName, SqlParameter[] sqlParameter, params object[] parameterValues) { if (String.IsNullOrEmpty(procedureName) == true) { throw new ArgumentException("Bạn chưa điền tên procedure"); } if (parameterValues != null && parameterValues.Length > 0) { DataTable dtProcedureInfo = GetProcedureInfo(procedureName); if (dtProcedureInfo.Rows.Count == 0) { throw new ArgumentException("Không tìm thấy procedure"); } if (dtProcedureInfo.Rows.Count != parameterValues.Length) { throw new ArgumentException("Không thể map các đối tượng"); } for (int i = 0; i <= dtProcedureInfo.Rows.Count - 1; i++) { sqlParameter[i] = new SqlParameter(dtProcedureInfo.Rows[i]["PARAMETER_NAME"].ToString(), Null.GetNull(parameterValues[i], DBNull.Value)); if (dtProcedureInfo.Rows[i]["DATA_TYPE"].ToString().Equals("image") == true) { sqlParameter[i].SqlDbType = SqlDbType.Image; } } } }