加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

ADO.NET 按照实体类自动天生添加修改语句仅限Oracle行使

发布时间:2021-01-11 21:58:33 所属栏目:站长百科 来源:网络整理
导读:话不多说直接上代码,新手上路,好手途经勿喷,请多多指教。 /// summary /// 便是号 /// /summary private readonly static string eq = string .Format( string .Empty + Convert.ToChar( 32 ) + Convert.ToChar( 61 ) + Convert.ToChar( 32 )); /// summa
副问题[/!--empirenews.page--]

话不多说直接上代码,新手上路,好手途经勿喷,请多多指教。

        /// <summary>
        /// 便是号
        /// </summary>
        private readonly static string eq = string.Format(string.Empty + Convert.ToChar(32) + Convert.ToChar(61) + Convert.ToChar(32));

        /// <summary>
        /// 前提变量
        /// </summary>
        private readonly static string where = string.Format(string.Empty + Convert.ToChar(32) + "WHERE 1" + eq + "1" + Convert.ToChar(32));

        /// <summary>
        /// 非常信息
        /// </summary>
        private readonly static string errInfo = string.Format("传入的key不存在");

        /// <summary>
        /// 录入信息存在风险
        /// </summary>
        private readonly static string injection = string.Format("录入信息存在风险");

?

        /// <summary>
        /// 添加Sql语句函数 fg
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <param name="key">主键名称,必需是实体工具中存在</param>
        /// <param name="value">主键值(序列)</param>
        /// <param name="outmsg"></param>
        /// <returns>fg: 添加按照实体类吸取的数据举办拼接sql语句</returns>
        public static string Added<T>(T t,string key,string value,out string outmsg)
        {
            bool blo = false;
            outmsg = string.Empty;
            string sql = string.Empty,error = string.Empty;
            StringBuilder sqlField = new StringBuilder();
            StringBuilder sqlValue = new StringBuilder();
            try
            {
                if (t == null)
                    return sql;
                if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
                    throw new Exception("工具实例化失败,请搜查主键是否正确");

                Type type = t.GetType();
                sqlField.AppendFormat("INSERT INTO " + type.Name + Convert.ToChar(32) + Convert.ToChar(40));
                sqlValue.AppendFormat(Convert.ToChar(32) + "VALUES" + Convert.ToChar(40));
                sqlField.AppendFormat(key);
                sqlValue.AppendFormat(value);
                PropertyInfo[] props = type.GetProperties();
                blo = props.Any(o => o.Name.ToUpper() != key);
                if (!blo)
                    throw new Exception(errInfo);

                Parallel.ForEach(props,p =>
                {
                    if (p.Name.Equals(key))
                        return;
                    if (p.GetValue(t,null) == null)
                        return;

                    switch (p.PropertyType.Name)
                    {
                        case "String":
                            var tmp = (string)p.GetValue(t,null);
                            blo = VerificationHelper.VerificationByStr(tmp);
                            if (!blo)
                                error = string.Format(injection);
                            sqlField.AppendFormat("," + p.Name);
                            sqlValue.AppendFormat(",‘" + (string.IsNullOrEmpty(tmp) ? tmp : tmp.Contains("‘") ? tmp.Replace("‘","‘‘") : tmp.Trim()) + "‘");
                            break;
                        case "DateTime":
                            sqlField.AppendFormat(",TO_DATE(‘" + p.GetValue(t,null) + "‘,‘YYYY-MM-DD HH24:MI:SS‘)");
                            break;
                        default:
                            sqlField.AppendFormat(",‘" + p.GetValue(t,null) + "‘");
                            break;
                    }
                });
                if (!string.IsNullOrEmpty(error))
                    throw new Exception(error);
                sqlField.AppendFormat(string.Empty + Convert.ToChar(41));
                sqlValue.AppendFormat(string.Empty + Convert.ToChar(41));
                sql = sqlField + sqlValue.ToString();
                return sql;
            }
            catch (Exception ex)
            {
                outmsg = ex.Message;
            }
            return sql;
        }

        /// <summary>
        /// 修改 sql 要领函数
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <param name="key">主键,必需是实体工具中存在的字段</param>
        /// <param name="value">主键值</param>
        /// <param name="outmsg"></param>
        /// <returns>fg: 修改函数封装按照吸取的实体工具天生sql修改语句</returns>
        public static string Edited<T>(T t,error = string.Empty,fieldVars = string.Empty;
            StringBuilder sqlstr = new StringBuilder();
            StringBuilder newSql = new StringBuilder();
            try
            {
                if (t == null)
                    return sql;
                if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
                    throw new Exception("工具实例化失败,请搜查主键是否正确");
                key = key.ToUpper();
                Type type = t.GetType();
                PropertyInfo[] props = type.GetProperties();
                sqlstr.AppendFormat("UPDATE" + Convert.ToChar(32) + type.Name + Convert.ToChar(32) + "SET" + Convert.ToChar(32));
                blo = props.Any(o => o.Name.ToUpper() != key);
                if (!blo)
                    throw new Exception(errInfo);
                Parallel.ForEach(props,p =>
                {
                    fieldVars = p.Name.ToUpper();
                    if (fieldVars.Equals(key))
                        return;
                    if (p.GetValue(t,null);
                            tmp = tmp.ToUpper();
                            blo = VerificationHelper.VerificationByStr(tmp);
                            if (!blo)
                                error = string.Format(injection);
                            sqlstr.AppendFormat(fieldVars + eq + "‘" + (string.IsNullOrEmpty(tmp) ? tmp : tmp.Contains("‘") ? tmp.Replace("‘","‘‘") : tmp.Trim()) + "‘,");
                            break;
                        case "DateTime":
                            sqlstr.AppendFormat(fieldVars + eq + "TO_DATE(‘" + p.GetValue(t,‘YYYY-MM-DD HH24:MI:SS‘),");
                            break;
                        default:
                            sqlstr.AppendFormat(fieldVars + eq + "‘" + p.GetValue(t,");
                            break;
                    }
                });
                if (!string.IsNullOrEmpty(error))
                    throw new Exception(error);
                sql = sqlstr.ToString().Remove(sqlstr.Length - 2);
                sqlstr.Clear();
                sqlstr.AppendFormat(sql);
                sqlstr.AppendFormat(where + "AND" + Convert.ToChar(32) + key + eq + value);
                sql = sqlstr.ToString();
                return sql;
            }
            catch (Exception ex)
            {
                outmsg = ex.Message;
            }
            return sql;
        }

        /// <summary>
        /// 按照前提修改 sql 要领函数
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <param name="condition">修改前提,直接写前提即可</param>
        /// <param name="outmsg"></param>
        /// <returns>fg: 修改函数封装按照吸取的实体工具天生sql修改语句</returns>
        public static string Editeds<T>(T t,string condition,tmpstr = string.Empty;
            StringBuilder sqlstr = new StringBuilder();
            StringBuilder newSql = new StringBuilder();

            try
            {
                if (t == null)
                    return sql;
                if (string.IsNullOrEmpty(condition))
                    throw new Exception("请先完美前提后,再实行");
                else
                    condition = condition.Trim();
                string[] array = condition.Split(‘ ‘);
                string str = array.FirstOrDefault();
                str = str.ToUpper();
                if (str.Equals("OR"))
                    throw new Exception("拼接前提部门开始不能行使"OR"要害字");
                if (str.Equals("AND"))
                {
                    array[0] = string.Empty;
                    foreach (var item in array)
                        tmpstr += item + Convert.ToChar(32);
                }
                else
                    tmpstr = condition;

                Type type = t.GetType();
                PropertyInfo[] props = type.GetProperties();
                sqlstr.AppendFormat("UPDATE" + Convert.ToChar(32) + type.Name + Convert.ToChar(32) + "SET" + Convert.ToChar(32));
                blo = props.Any(o => o.Name.ToUpper() != key);
                if (!blo)
                    throw new Exception(errInfo);

                Parallel.ForEach(props,null);
                            blo = VerificationHelper.VerificationByStr(tmp);
                            if (!blo)
                                error = string.Format(injection);
                            sqlstr.AppendFormat(p.Name + eq + "‘" + (string.IsNullOrEmpty(tmp) ? tmp : tmp.Contains("‘") ? tmp.Replace("‘",");
                            break;
                        case "DateTime":
                            sqlstr.AppendFormat(p.Name + eq + "TO_DATE(‘" + p.GetValue(t,");
                            break;
                        default:
                            sqlstr.AppendFormat(p.Name + eq + "‘" + p.GetValue(t,");
                            break;
                    }
                });
                if (!string.IsNullOrEmpty(error))
                    throw new Exception(error);
                sql = sqlstr.ToString().Remove(sqlstr.Length - 2);
                sqlstr.Clear();
                sqlstr.AppendFormat(sql);
                sqlstr.AppendFormat(where + "AND" + Convert.ToChar(32) + tmpstr);
                sql = sqlstr.ToString();
                return sql;
            }
            catch (Exception ex)
            {
                outmsg = ex.Message;
            }
            return sql;
        }

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读