⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ormwriter.cs

📁 一个小型的ORM框架,写得不好请多多指教
💻 CS
📖 第 1 页 / 共 2 页
字号:
                        strWOA = " OR ";
                    }
                }
            }

            strSQL = string.Format(strSQL, new string[] { strTablename, strWHERE });

            using (SqlConnection conn = new SqlConnection(PubFuncs.ConnectionStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = strSQL;

                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    if (rdr.Read())
                    {
                        throw new Exception("下列字段值不能重复:" + strFieldMessage);
                    }                    
                }
            }
        }

        public object Update(object ModelObject)
        {
            using (SqlConnection conn = new SqlConnection(PubFuncs.ConnectionStr))
            {
                conn.Open();
                SqlTransaction trans = conn.BeginTransaction();
                ModelObject = Update(trans, ModelObject);

                trans.Commit();

                return ModelObject;
            }
        }

        /// <summary>
        /// 修改记录
        /// </summary>
        /// <param name="ModelObject">记录Model</param>
        /// <returns>记录Model</returns>
        public object Update(SqlTransaction trans, object ModelObject)
        {
            //CheckValidate(ModelObject);

            int iObjectID = 0;
            List<SqlParameter> Params = new List<SqlParameter>();
            string strSQL = PubFuncs.GetUpdateSQL(ModelObject, ref Params);

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = trans.Connection;
            cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = strSQL;

            foreach (SqlParameter Param in Params)
            {
                cmd.Parameters.Add(Param);
            }

            if (strSQL.Contains("INSERT"))
            {
                //表示是插入
                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    rdr.Read();

                    if (rdr.GetInt32(1) != 0)
                        throw new ApplicationException("插入新记录" + ModelObject.ToString() + "出错,SQL错误号:" + rdr.GetInt32(1)); ;

                    cmd.Parameters.Clear();
                    iObjectID = rdr.GetInt32(0);  //返回ID

                    //设置对象的Key值
                    PubFuncs.SetKeyValue(ModelObject, iObjectID);
                }
            }
            else
            {
                //表示是修改,根据SQL_UPDATE语句修改数据库
                int iReturnNumber = cmd.ExecuteNonQuery();
                if (iReturnNumber <= 0)
                {
                    throw new ApplicationException("修改" + ModelObject.ToString() + "的时候出错。");
                }

                iObjectID = Convert.ToInt32(PubFuncs.GetKeyValue(ModelObject));
            }

            cmd.Parameters.Clear();

            #region 保存子对象
            PropertyInfo[] props = ModelObject.GetType().GetProperties();
            MiniORMAttribute.SubDataObjectAttribute SubDataAttr = null;
            object[] CustomAttributes;

            foreach (PropertyInfo prop in props)
            {
                CustomAttributes = prop.GetCustomAttributes(typeof(MiniORMAttribute.SubDataObjectAttribute), false);
                if (CustomAttributes.Length > 0)
                {
                    SubDataAttr = CustomAttributes[0] as MiniORMAttribute.SubDataObjectAttribute;
                    if (SubDataAttr != null)
                    {
                        switch (SubDataAttr.FieldType)
                        {
                            case MiniORMAttribute.SubDataObjectFieldType.Object:
                                {
                                    object objModel = prop.GetValue(ModelObject, null);
                                    //设置objModel的Foreignkey为当前新记录的ID
                                    PubFuncs.SetForeignkeyValue(objModel, iObjectID);
                                    //插入对象
                                    Update(trans, objModel);
                                }
                                break;
                            //case MiniORMAttribute.SubDataObjectFieldType.MyHashTable:
                            //    {
                            //        System.Collections.ICollection colValues = ((INS.Model.MyHashTable)prop.GetValue(ModelObject, null)).Values;
                            //        foreach (object obj in colValues)
                            //        {
                            //            //设置objModel的Foreignkey为当前新记录的ID
                            //            PubFuncs.SetForeignkeyValue(obj, iObjectID);
                            //            //插入对象
                            //            Update(trans, obj);
                            //        }
                            //    }
                            //    break;
                            case MiniORMAttribute.SubDataObjectFieldType.HashTable:
                                {
                                    System.Collections.ICollection colValues = ((System.Collections.Hashtable)prop.GetValue(ModelObject, null)).Values;
                                    foreach (object obj in colValues)
                                    {
                                        //设置objModel的Foreignkey为当前新记录的ID
                                        PubFuncs.SetForeignkeyValue(obj, iObjectID);
                                        //插入对象
                                        Update(trans, obj);
                                    }
                                }
                                break;
                            case MiniORMAttribute.SubDataObjectFieldType.List:
                                {
                                    System.Collections.IList list = (System.Collections.IList)prop.GetValue(ModelObject, null);
                                    foreach (object obj in list)
                                    {
                                        //设置objModel的Foreignkey为当前新记录的ID
                                        PubFuncs.SetForeignkeyValue(obj, iObjectID);
                                        //插入对象
                                        Update(trans, obj);
                                    }
                                }
                                break;
                            case MiniORMAttribute.SubDataObjectFieldType.ArrayList:
                                {
                                    System.Collections.ArrayList list = (System.Collections.ArrayList)prop.GetValue(ModelObject, null);
                                    foreach (object obj in list)
                                    {
                                        //设置objModel的Foreignkey为当前新记录的ID
                                        PubFuncs.SetForeignkeyValue(obj, iObjectID);
                                        //插入对象
                                        Update(trans, obj);
                                    }
                                }
                                break;
                        }
                    }
                }
            }
            #endregion

            return ModelObject;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -