internal override void InitializeParameter(ProviderType type, DbParameter parameter, object value) { SqlType sqlType = (SqlType)type; if (sqlType.IsRuntimeOnlyType) { throw Error.BadParameterType(sqlType.GetClosestRuntimeType()); } System.Data.SqlClient.SqlParameter sParameter = parameter as System.Data.SqlClient.SqlParameter; if (sParameter != null) { sParameter.SqlDbType = sqlType.SqlDbType; if (sqlType.HasPrecisionAndScale) { sParameter.Precision = (byte)sqlType.Precision; sParameter.Scale = (byte)sqlType.Scale; } } else { PropertyInfo piSqlDbType = parameter.GetType().GetProperty("SqlDbType"); if (piSqlDbType != null) { piSqlDbType.SetValue(parameter, sqlType.SqlDbType, null); } if (sqlType.HasPrecisionAndScale) { PropertyInfo piPrecision = parameter.GetType().GetProperty("Precision"); if (piPrecision != null) { piPrecision.SetValue(parameter, Convert.ChangeType(sqlType.Precision, piPrecision.PropertyType, CultureInfo.InvariantCulture), null); } PropertyInfo piScale = parameter.GetType().GetProperty("Scale"); if (piScale != null) { piScale.SetValue(parameter, Convert.ChangeType(sqlType.Scale, piScale.PropertyType, CultureInfo.InvariantCulture), null); } } } parameter.Value = GetParameterValue(sqlType, value); int?determinedSize = DetermineParameterSize(sqlType, parameter); if (determinedSize.HasValue) { parameter.Size = determinedSize.Value; } }
protected object GetParameterValue(SqlType type, object value) { if (value == null) { return(DBNull.Value); } else { Type vType = value.GetType(); Type pType = type.GetClosestRuntimeType(); if (pType == vType) { return(value); } else { return(DBConvert.ChangeType(value, pType)); } } }
protected object GetParameterValue(SqlType type, object value) { if(value == null) { return DBNull.Value; } else { Type vType = value.GetType(); Type pType = type.GetClosestRuntimeType(); if(pType == vType) { return value; } else { return DBConvert.ChangeType(value, pType); } } }