Пример #1
0
        public int Update(T obj, Hashtable ht)
        {
            if (obj == null)
            {
                return(0);
            }
            if (ht == null || ht.Count < 1)
            {
                return(0);
            }

            Type t = obj.GetType();

            var _T_PkName    = PkName;
            var _T_TableName = DbTable;

            if (String.IsNullOrEmpty(_T_PkName) || String.IsNullOrEmpty(_T_TableName))
            {
                return(0);
            }
            PropertyInfo pk      = t.GetProperty(_T_PkName);
            object       pkvalue = pk.GetValue(obj, null);

            if (pkvalue == null)
            {
                return(0);
            }
            Hashtable htupdate = new Hashtable();

            htupdate[_T_PkName] = pkvalue;

            string sql       = String.Format("update {0} set ", _T_TableName);
            string updatesql = "";

            foreach (string x in ht.Keys)
            {
                updatesql  += "," + x + "=@" + x;
                htupdate[x] = ht[x];
            }
            updatesql = updatesql.Trim(',');
            sql      += updatesql;
            sql      += " where " + _T_PkName + "=@" + _T_PkName;
            return(RunDB.Execute(sql, htupdate, DbConnectionString));
        }
Пример #2
0
 public int Execute(string sql, Hashtable ht = null)
 {
     return(RunDB.Execute(sql, ht, DbConnectionString));
 }
Пример #3
0
        public object AddOrUpdate(T obj, params object[] paras)
        {
            Type t = obj.GetType();
            //NEED CACHE
            var    sp = Spring;
            string TableName = sp.TableName, PKName = sp.PKName, Columns = sp.Columns;
            bool   自增编号 = sp.IdentityPK;

            object   temp操作 = null;
            DBAction 插入数据   = DBAction.插入;

            if (paras != null && paras.Length > 0)
            {
                temp操作 = paras.FirstOrDefault(x => x.GetType().Equals(typeof(DBAction)));
                if (temp操作 != null)
                {
                    插入数据 = (DBAction)temp操作;
                }
            }
            PropertyInfo pk = t.GetProperty(PKName);

            if (temp操作 == null || 插入数据.Equals(DBAction.自动))
            {
                if (pk != null && pk.CanWrite)
                {
                    object vpk = pk.GetValue(obj, null);
                    //var vpk = PropertyCallAdapterProvider<T>.GetInstance(PKName).InvokeGet(obj);

                    if (vpk != null)
                    {
                        if (!(vpk.ToString().Equals("0")))
                        {
                            插入数据 = DBAction.更新;
                        }
                        else
                        {
                            插入数据 = DBAction.插入;
                        }
                    }
                }
            }

            string    sql = "";
            Hashtable ht  = new Hashtable();

            Dictionary <string, string> _扩展叠加字段 = null;

            if (paras != null)
            {
                _扩展叠加字段 = (Dictionary <string, string>)paras.FirstOrDefault(x => x.GetType().Equals(typeof(Dictionary <string, string>)));
            }
            if (_扩展叠加字段 == null)
            {
                _扩展叠加字段 = new Dictionary <string, string>();
            }
            var hashAppendKey = obj.GetHashCode().ToString();

            foreach (PropertyInfo pi in t.GetProperties())
            {
                string piName = pi.Name;//不做处理,注意大小写
                object v      = pi.GetValue(obj, null);
                try
                {
                    if ((string.IsNullOrWhiteSpace(Columns) || Columns.IndexOf(piName.GetForkColumn()) != -1))
                    {
                        bool 赋值 = true;
                        if (v != null && v.GetType().Equals(typeof(DateTime)))
                        {
                            //对日期联系的做特殊处理
                            if (((DateTime)v).Year < 1753)
                            {
                                赋值 = false;
                            }
                        }
                        if (赋值)
                        {
                            if (piName.Equals(PKName, StringComparison.CurrentCultureIgnoreCase))
                            {
                                //是主键
                                if (插入数据.Equals(DBAction.插入) && v != null && v.ToString() != "0")
                                {
                                    //是插入,有值,OK
                                    sql += piName + ",";
                                }
                            }
                            else
                            {
                                //OK
                                sql += piName + ",";
                            }
                            var tmpt = pi.PropertyType;
                            if (!tmpt.IsValueType && tmpt != typeof(string))
                            {
                                v = JSONHelper.ToJSON(v);
                            }
                            ht[piName + hashAppendKey] = v;
                        }
                    }
                }
                catch (Exception ep)
                {
                    Console.WriteLine(ep.ToString());
                }
            }
            if (ht == null || ht.Count < 1)
            {
                return(null);
            }
            foreach (var xi in _扩展叠加字段)
            {
                var mi = xi.Key + hashAppendKey;
                if (ht.ContainsKey(mi))
                {
                    continue;                    //不允许更新已经被修改的值
                }
                sql   += xi.Key + ",";
                ht[mi] = xi.Value;
            }
            sql = sql.Trim(',');
            if (string.IsNullOrEmpty(sql))
            {
                return(null);
            }
            if (插入数据.Equals(DBAction.插入))
            {
                var preargs = string.Join(",", from xi in sql.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) select "@" + xi.Trim() + obj.GetHashCode());
                sql = String.Format(" insert  into {0} ({1}) values ({2}) ", TableName, sql, preargs);
            }
            else
            {
                var preargs = string.Join(",", from xi in sql.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                          select xi.Trim() + "=@" + xi.Trim() + obj.GetHashCode());
                sql = String.Format(" update {0} set {1} where {2}=@{2}{3}", TableName, preargs, PKName, obj.GetHashCode());
            }
            bool 就地执行 = false;

            if (paras != null)
            {
                for (int i = 0; i < paras.Length; i++)
                {
                    object o = paras[i];
                    if (null == o)
                    {
                        continue;
                    }
                    if (o.GetType().Equals(typeof(StringBuilder)))
                    {
                        StringBuilder sb = o as StringBuilder;
                        if (i.Equals(0))
                        {
                            sb.AppendFormat(" {0}", sql);
                        }
                        else
                        {
                            sb.Insert(0, sql);
                        }
                        sql = sb.ToString();
                    }

                    else if (o.GetType().Equals(typeof(Hashtable)))
                    {
                        Hashtable newht = o as Hashtable;
                        foreach (DictionaryEntry de in ht)
                        {
                            if (!newht.ContainsKey(de.Key))
                            {
                                newht.Add(de.Key, de.Value);
                            }
                        }
                        ht = newht;
                    }
                    else if (o.GetType().Equals(typeof(bool)))
                    {
                        bool 是否执行 = (bool)o;
                        if (是否执行)
                        {
                            就地执行 = true;
                        }
                    }
                }
            }
            if (就地执行)
            {
                bool 需返回值 = false;
                //直接执行
                PropertyInfo pi = t.GetProperty(PKName);
                if (自增编号 && 插入数据.Equals(DBAction.插入))
                {
                    object defaultvalue = pi.GetValue(obj, null);
                    if (defaultvalue == null || defaultvalue.ToString().Equals("0"))
                    {
                        需返回值 = true;
                        sql += " ; " + RunDB.GetAutoCols(PKName + obj.GetHashCode().ToString());
                    }
                }
                DataSet ds = null;
                if (需返回值)
                {
                    ds = RunDB.GetDataSet(sql, ht, DbConnectionString);
                    if (!Common.IsNull(ds))
                    {
                        if (插入数据.Equals(DBAction.插入) && ds.Tables.Count > 0 && !Common.IsNull(ds.Tables[ds.Tables.Count - 1]))
                        {
                            if (ds.Tables[ds.Tables.Count - 1].Columns.Contains(PKName + obj.GetHashCode().ToString()))
                            {
                                if (pi != null && pi.CanWrite)
                                {
                                    var od        = ds.Tables[ds.Tables.Count - 1].Rows[0][PKName + obj.GetHashCode().ToString()];
                                    var re_id_obj = od.ToString();

                                    if (pi.PropertyType == typeof(int))
                                    {
                                        pi.SetValue(obj, int.Parse(re_id_obj), null);
                                    }
                                    else if (pi.PropertyType == typeof(long))
                                    {
                                        pi.SetValue(obj, long.Parse(re_id_obj), null);
                                    }
                                    else if (pi.PropertyType == typeof(ulong))
                                    {
                                        pi.SetValue(obj, ulong.Parse(re_id_obj), null);
                                    }
                                    else if (pi.PropertyType == typeof(uint))
                                    {
                                        pi.SetValue(obj, uint.Parse(re_id_obj), null);
                                    }
                                    else
                                    {
                                        pi.SetValue(obj, od, null);
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    RunDB.Execute(sql, ht, DbConnectionString);
                }
                return(ds);
            }
            return(new ArrayList()
            {
                sql, ht
            });
        }