Пример #1
0
        /// <summary>
        /// 丢出包含SQL脚本的异常
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="ex"></param>
        public void ThrowSqlException(string sql, object parameters, Exception ex)
        {
            HashSet <string> hs = GetParamters(sql);

            if (parameters != null && parameters is DynamicParameters)
            {
                DynamicParameters dParameters = parameters as DynamicParameters;
                var names = dParameters.ParameterNames;
                if (names != null)
                {
                    foreach (var name in names)
                    {
                        if (hs.Contains(name))
                        {
                            DbType paramValueType = dParameters.GetValueType(name);

                            string tempValue = (dParameters.Get <string>(name) ?? "");

                            if (paramValueType == DbType.String)
                            {
                                tempValue = "'" + tempValue + "'";
                            }
                            else if (paramValueType == DbType.DateTime)
                            {
                                if (dapper.DBType == DatabaseType.Oracle)
                                {
                                    tempValue = "to_date('" + tempValue + "','yyyy-mm-dd hh24:mi:ss')";
                                }
                                else
                                {
                                    tempValue = "'" + tempValue + "'";
                                }
                            }
                            string field = paramPrefix + name;
                            Regex  regex = new Regex(field + "[^A-Za-z1-9_]");
                            var    match = regex.Match(sql);
                            if (match != null && match.Success)
                            {
                                Group g = match.Groups.Cast <Group>().OrderBy(x => x.Length).First();
                                tempValue += g.Value.Replace(field, "");
                                sql        = sql.Replace(g.Value, tempValue);
                            }
                            else
                            {
                                sql = sql.Replace(paramPrefix + name, tempValue);
                            }
                            //sql = sql.Replace(DbContext.Instance.ParamPrefix + name, tempValue);
                        }
                    }
                }
            }
            else if (parameters != null)
            {
                Type t    = parameters.GetType();
                var  list = t.GetProperties().Select(x => x.Name).ToList();
                foreach (var name in hs)
                {
                    string propValue = Convert.ToString(t.GetProperty(list.FirstOrDefault(x => x.ToLower() == name.ToLower()) ?? name)
                                                        .GetValue(parameters, null));
                    sql = sql.Replace(paramPrefix + name,
                                      "'" + (propValue ?? "") + "'");
                }
            }

            if (ex != null)
            {
                throw new Exception(ex.Message.Trim() + @"
" + sql, ex);
            }
            else
            {
                throw new Exception(sql);
            }
        }