StackExchange.Profiling.SqlTiming.GetValue C# (CSharp) Method

GetValue() private static method

Returns the value of parameter suitable for storage/display.
private static GetValue ( IDataParameter parameter ) : string
parameter IDataParameter The DB Parameter. ///
return string
        private static string GetValue(IDataParameter parameter)
        {
            object rawValue = parameter.Value;

            if (rawValue is DataTable)
            {
                var rows = new List<List<string>>();
                foreach (DataRow row in ((DataTable)rawValue).Select())
                {
                    var colValues = new List<string>();
                    foreach (DataColumn col in row.Table.Columns)
                    {
                        colValues.Add((row[col] == DBNull.Value || row[col] == null) ? "NULL" : row[col].ToString());
                    }
                    rows.Add(colValues);
                }

                return rows.ToJson();

            }

            if (rawValue == null || rawValue == DBNull.Value)
            {
                return null;
            }

            // This assumes that all SQL variants use the same parameter format, it works for T-SQL
            if (parameter.DbType == DbType.Binary)
            {
                var bytes = rawValue as byte[];
                if (bytes != null && bytes.Length <= MaxByteParameterSize)
                {
                    return "0x" + BitConverter.ToString(bytes).Replace("-", string.Empty);
                }

                // Parameter is too long, so blank it instead
                return null;
            }

            if (rawValue is DateTime)
            {
                return ((DateTime)rawValue).ToString("s", System.Globalization.CultureInfo.InvariantCulture);
            }

            // we want the integral value of an enum, not its string representation
            var rawType = rawValue.GetType();
            if (rawType.IsEnum)
            {
                // use ChangeType, as we can't cast - http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx
                return Convert.ChangeType(rawValue, Enum.GetUnderlyingType(rawType)).ToString();
            }

            return rawValue.ToString();
        }