コード例 #1
0
        internal override void InitializeParameter(ProviderType type, DbParameter parameter, object value)
        {
            SqlType sqlType = (SqlType)type;

            if (sqlType.IsRuntimeOnlyType)
            {
                throw Error.BadParameterType(sqlType.GetClosestRuntimeType());
            }
            SqlClient.SqlParameter sParameter = parameter as 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;
            }
        }
        /// <summary>Returns a System.String that represents the parameter.</summary>
        /// <param name="parameter">The parameter.</param>
        /// <param name="named">Include the parameter name.</param>
        /// <returns>A formatted string for the input/output parameter.</returns>
        public static string ToString(this DbParameter parameter, bool named)
        {
            string value = string.Empty;

            switch (parameter.DbType)
            {
            // Quoted Values.
            case DbType.AnsiString:
            case DbType.AnsiStringFixedLength:
            case DbType.Date:
            case DbType.DateTime:
            case DbType.DateTime2:
            case DbType.DateTimeOffset:
            case DbType.String:
            case DbType.StringFixedLength:
            case DbType.Time:
                if (named)
                {
                    value = string.Format(
                        "{0}='{1}'",
                        parameter.ParameterName,
                        parameter.Value ?? "null");
                }
                else
                {
                    value = string.Format("'{0}'", parameter.Value ?? "null");
                }

                break;

            case DbType.Xml:
                if (named)
                {
                    value = string.Format("{0}='{1}'", parameter.ParameterName, SecurityElement.Escape((parameter.Value ?? "null").ToString()));
                }
                else
                {
                    value = string.Format("'{0}'", SecurityElement.Escape((parameter.Value ?? "null").ToString()));
                }

                break;

            // Numeric Values.
            case DbType.Currency:
            case DbType.Decimal:
            case DbType.Double:
            case DbType.Single:
            case DbType.Int16:
            case DbType.Int32:
            case DbType.Int64:
            case DbType.SByte:
            case DbType.UInt16:
            case DbType.UInt32:
            case DbType.UInt64:
            case DbType.VarNumeric:
                if (named)
                {
                    value = string.Format("{0}={1}", parameter.ParameterName, parameter.Value ?? "null");
                }
                else
                {
                    value = string.Format("{0}", parameter.Value ?? "null");
                }

                break;

            // Binary Values.
            case DbType.Binary:
                byte[] parameterValue = (parameter.Value as byte[]) ?? new byte[] { };

                if (named)
                {
                    value = string.Format(
                        "{0}=0x{1}",
                        parameter.ParameterName,
                        parameterValue.Length == 0
                                    ? "0"
                                    : string.Join("", parameterValue.Select(c => c.ToString("X2")).ToArray()));
                }
                else
                {
                    value = string.Format(
                        "0x{0}",
                        parameterValue.Length == 0
                                    ? "0"
                                    : string.Join("", parameterValue.Select(c => c.ToString("X2")).ToArray()));
                }

                break;

            case DbType.Guid:
                if (named)
                {
                    value = string.Format("{0}='{{{1}}}'", parameter.ParameterName, (parameter.Value ?? "null").ToString());
                }
                else
                {
                    value = string.Format("{{{0}}}", (parameter.Value ?? "null").ToString());
                }

                break;

            case DbType.Object:
                SqlClient.SqlParameter sqlParameter = parameter as SqlClient.SqlParameter;

                if (sqlParameter == null || sqlParameter.SqlDbType != SqlDbType.Structured)
                {
                    if (named)
                    {
                        value = string.Format("{0}=[{1}]", parameter.ParameterName, (parameter.Value ?? "null").ToString().Substring(parameter.ParameterName.Length, 16));
                    }
                    else
                    {
                        value = string.Format("[{0}]", (parameter.Value ?? "null").ToString().Substring(0, 16));
                    }
                }
                else
                {
                    if (named)
                    {
                        value = string.Format("{0}=[{1}]", parameter.ParameterName, (parameter.Value == null ? "null" : "[...]"));
                    }
                    else
                    {
                        value = string.Format("[{0}]", (parameter.Value == null ? "null" : "[...]"));
                    }
                }
                break;

            // Other Values.
            case DbType.Boolean:
                if (named)
                {
                    value = string.Format("{0}='{1}'", parameter.ParameterName, (parameter.Value ?? "null").ToString());
                }
                else
                {
                    value = string.Format("'{0}'", (parameter.Value ?? "null").ToString());
                }

                break;

            case DbType.Byte:
                if (named)
                {
                    value = string.Format("{0}='{1}'", parameter.ParameterName, (parameter.Value ?? "null").ToString().Substring(0, 16));
                }
                else
                {
                    value = string.Format("'{0}'", (parameter.Value ?? "null").ToString().Substring(0, 16));
                }

                break;
            }

            if (parameter.Direction == ParameterDirection.Output || parameter.Direction == ParameterDirection.InputOutput)
            {
                value += " output";
            }

            return(value);
        }