毕设之数据库操作

为了简化操作,使得所有的增删改查都统一处理,不用区别对待那个表。通俗来讲也就是不用对哪个表进行插入操作时都需要进行一系列的Insert的了。为此设计了几个方法进行控制。这样一来可以更高的提高开发的效率,但是也损失了系统的性能。

一、Insert

设计思路:通过反射来获取实体类的字段类型和字段,再根据实际情况进行处理。

方法名:public int Insert(object obj){}其中的参数obj是指需要插入的实体类。

  #region Insert
        public int Insert(object obj)
        {
            int count = -2;
            string filedStr = string.Empty;
            string ConditionStr = string.Empty;
            Type type = obj.GetType();
            PropertyInfo[] infos = type.GetProperties();
            if (infos.Length > 0)
            {
                foreach (PropertyInfo info in infos)
                {

                    if (info.PropertyType.Name.ToLower() == "datetime")
                    {
                        filedStr += info.Name + ",";
                        DateTime dt = (DateTime)info.GetValue(obj, null);
                        string time = dt.ToString("yyyy-MM-dd HH:mm:ss");
                        if (time.Contains("0001-01-01"))
                        {
                            ConditionStr += "‘" + DBNull.Value + "‘" + ",";
                        }
                        else
                        {
                            ConditionStr += "‘" + time + "‘" + ",";
                        }

                    }
                    if (info.PropertyType.Name.ToLower() == "string")
                    {
                        filedStr += info.Name + ",";
                        ConditionStr += "‘" + Convert.ToString(info.GetValue(obj, null)) + "‘" + ",";
                    }
                    if (info.PropertyType.Name.ToLower() == "boolean")
                    {
                        filedStr += info.Name + ",";
                        char flag = ‘0‘;
                        if (Convert.ToBoolean(info.GetValue(obj, null)) == true)
                        {
                            flag = ‘1‘;
                        }
                        else
                        {
                            flag = ‘0‘;
                        }

                        ConditionStr += flag + ",";
                    }
                    if (info.PropertyType.Name.ToLower() == "int32")
                    {
                        filedStr += info.Name + ",";
                        ConditionStr += Convert.ToInt32(info.GetValue(obj, null)) + ",";
                    }
                    if (info.PropertyType.Name.ToLower() == "single")
                    {
                        filedStr += info.Name + ",";
                        ConditionStr += Convert.ToDouble(info.GetValue(obj, null)) + ",";
                    }
                    if (info.PropertyType.Name.ToLower() == "decimal")
                    {
                        filedStr += info.Name + ",";
                        ConditionStr += Convert.ToDecimal(info.GetValue(obj, null)) + ",";
                    }
                }
            }
            string fieldString = filedStr.Remove(filedStr.Length - 1);
            string conditionString = ConditionStr.Remove(ConditionStr.Length - 1);
            string sql = string.Format("insert into {0}({1}) values({2})", type.Name, fieldString, conditionString);
            count=this.SaveOrUpdate(sql);//封装好对数据库执行操作
            return count;

        }
        #endregion

二、Edit

描述:对字段进行修改。

设计思路:传入修改之前和修改之后的俩个实体类,对这俩个实体类行进比较,对于俩者之间的不同。记录下来,然后进行数据库的Update操作。

方法名: public int Edit(object obj,object newObj,string DJID,string DJIDName)

参数:obj:修改之前的实体类。

newObj:修改之后的实体类。

DJIDName:主键ID, 用来匹配Where条件。

DJID:主键ID值,因为ID的唯一性

 #region Edit
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="obj">之前的数据</param>
        /// <param name="newObj">修改之后的数据</param>
        /// <param name="DJID">主键</param>
        /// <returns>结果</returns>
        public int Edit(object obj,object newObj,string DJID,string DJIDName)
        {

            Type objType = obj.GetType();
            string tableName = objType.Name;

            Type newObjType = newObj.GetType();
            PropertyInfo[] objInfos = objType.GetProperties();
            PropertyInfo[] newObjInfos = newObjType.GetProperties();
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("update {0} set", tableName);
            foreach (PropertyInfo objInfo in objInfos)
            {
                foreach (PropertyInfo newObjInfo in newObjInfos)
                {
                    if (objInfo.Name == newObjInfo.Name)
                    {
                        object value = objInfo.GetValue(obj, null);
                        object newValue = newObjInfo.GetValue(newObj, null);
                        if (!value.Equals(newValue)&& newValue != null)
                        {
                            if (objInfo.PropertyType.Name.ToLower() == "datetime")
                            {

                                DateTime dt = (DateTime)newValue;
                                string time = dt.ToString("yyyy-MM-dd HH:mm:ss");
                                if (time.Contains("0001-01-01"))
                                {
                                    sb.AppendFormat(" {0}=‘{1}‘,", newObjInfo.Name, DBNull.Value);
                                }
                                else
                                {
                                    sb.AppendFormat(" {0}=‘{1}‘,", newObjInfo.Name, time);
                                }

                            }

                            if (objInfo.PropertyType.Name.ToLower() == "string")
                            {
                                sb.AppendFormat(" {0}=‘{1}‘,", newObjInfo.Name, Convert.ToString(newValue));
                            }
                            if (objInfo.PropertyType.Name.ToLower() == "boolean")
                            {
                                ;
                                char flag = ‘0‘;
                                if (Convert.ToBoolean(newValue) == true)
                                {
                                    flag = ‘1‘;
                                }
                                else
                                {
                                    flag = ‘0‘;
                                }

                                sb.AppendFormat(" {0}={1},", newObjInfo.Name, flag);
                            }
                            if (objInfo.PropertyType.Name.ToLower() == "int32")
                            {
                                sb.AppendFormat(" {0}={1},", newObjInfo.Name, Convert.ToInt32(newValue));
                            }
                            if (objInfo.PropertyType.Name.ToLower() == "single")
                            {
                                sb.AppendFormat(" {0}={1},", newObjInfo.Name, Convert.ToDouble(newValue));
                            }
                            if (objInfo.PropertyType.Name.ToLower() == "decimal")
                            {
                                sb.AppendFormat(" {0}={1},", newObjInfo.Name, Convert.ToDecimal(newValue));
                            }

                        }
                        break;
                    }

                }
            }
            string sqlHA = sb.ToString();
            string SQL=sqlHA.Remove(sqlHA.Length - 1);
            SQL += " where " + DJIDName + "=" + "‘" + DJID + "‘";
            int count=SaveOrUpdate(SQL);
            return count;
        }
        #endregion

三、Select

描述:查询数据库中表的所有信息,并将表中的记录保存到实体类中,实体类放到ArrayList中。

设计思路:使用泛型和反射。通过利用泛型来获取实体类的类型,利用反射来获取实体类字段,并进行赋值。

方法名:   public ArrayList Select<T>(string tableName, string sql = "") where T : new().。声明了一个泛型方法。

参数:tableName:数据库中想要查询的数据表。

sql=“”;查询的SQL

#region Select
        public ArrayList Select<T>(string tableName, string sql = "") where T : new()
        {
            ArrayList list = new ArrayList();
            DataTable dt = baseFormDal.Select(tableName, sql);
            if (dt != null && dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    T t = new T();

                    Type type = t.GetType();
                    PropertyInfo[] infos = type.GetProperties();
                    if (infos.Length > 0)
                    {
                        foreach (PropertyInfo info in infos)
                        {
                            foreach (DataColumn dc in dt.Columns)
                            {
                                if (info.Name == dc.ColumnName)
                                {
                                    if (info.PropertyType.Name.ToLower() == "string")
                                    {
                                        info.SetValue(t, dr[dc.ColumnName].ToString(), null);
                                    }
                                    else if (info.PropertyType.Name.ToLower() == "datetime")
                                    {
                                        if (string.IsNullOrWhiteSpace(dr[dc.ColumnName].ToString()))
                                        {
                                            //info.SetValue(t, new DateTime(), null);
                                        }
                                        else
                                        {
                                            DateTime date = DateTime.Parse(dr[dc.ColumnName].ToString());
                                            info.SetValue(t, date, null);
                                        }
                                    }
                                    else if (info.PropertyType.Name.ToLower() == "boolean")
                                    {
                                        if (dr[dc.ColumnName].ToString() == "1")
                                        {
                                            info.SetValue(t, true, null);
                                        }
                                        else
                                        {
                                            info.SetValue(t, false, null);
                                        }
                                    }
                                    else if (info.PropertyType.Name.ToLower() == "double" ||
                                        info.PropertyType.Name.ToLower() == "float")
                                    {
                                        info.SetValue(t, Convert.ToDouble(dr[dc.ColumnName]), null);
                                    }
                                    else if (info.PropertyType.Name.ToLower() == "decimal")
                                    {
                                        info.SetValue(t, Convert.ToDecimal(dr[dc.ColumnName]), null);
                                    }
                                }
                            }
                        }
                    }
                    list.Add(t);

                }
            }
            return list;

        }

时间: 2024-09-20 06:29:17

毕设之数据库操作的相关文章

C# .NET更智能的数据库操作的封装

前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注重点的是怎么分析设计数据库操作封装,代码是其次.而且,这是我第一篇文章,为了想好怎么实现花了些天,代码是博客发表时现写的.所以我想,使用可能还有bug,而且没有try catch异常的设计. 这个框架我理应做到对数据库无关,无论是哪个数据库都能够使用.不过,重点在于分析,而不是代码.所以,为了更好的

python--第十一天总结(paramiko 及数据库操作)

数据库操作 Python 操作 Mysql 模块的安装 linux:     yum install MySQL-python window:     http://files.cnblogs.com/files/wupeiqi/py-mysql-win.zip

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

SQLiteDatabase数据库操作详解

今天花了点时间总结了一下数据的相关知识android中系统自带的数据库SQLiteDatabase数据库,这种数据库操作起来比ormLite数据库(第三方的)麻烦点,但是我对这种数据库操作比较熟悉所以我就采用了这种数据库,如有错误欢迎大家批评指正,谢谢 1.SQLiteDatabase SQLiteDatabase本身是一个数据库的操作类,但是如果想进行数据库的操作,还需要android.database.sqlite.SQLiteOpenHelper类的帮助,在执行SQL语句时execSQL(

Android打造属于自己的数据库操作类。

1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要去做增删改查的操作的时候,就得通过getWritableDatabase获取一个SQLiteDataBase然后老老实实去写操作值的put以及查询返回的Cursor处理,其实我们可以搞一个对象来帮我们干这些事情,打造属于你自己的数据库操作类. 2.操作类的初显形 假设现在我们什么都没有,我们要去搞一

laravel 数据库操作小例子

public function demo() { $res = null; //insert数据插入 //$user=array('username'=>'joy','password'=>'123456','age'=>23); //$res = DB::table('users')->insert($user); /* 数据查询 $res = DB::table('users')->where('username','joy')->get(); $res = DB:

常用的Mysql数据库操作语句大全

零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PASSWORD('fdddfd'); 3.权限管理 >SHOW GRANTS FOR name;    //查看name用户权限 >GRANT SELECT ON db_name.* TO name; //给name用户db_name数据库的所有权限 >REVOKE SELECT ON db_n

人事管理系统——数据库操作类

连接数据库类主要代码: 1 package PersonSystem; 2 3 import java.sql.*; 4 /** 5 * 6 * 连接数据库的类 7 * 8 */ 9 public class Database 10 { 11 private Statement stmt = null; 12 ResultSet rs = null; 13 private Connection conn = null; 14 String sql; 15 String strurl = "jdb

SQL数据库操作整理

1.规范 ①关键字与函数名称全部大写: ②数据库名称.表名称.字段名称全部小写: ③SQL语句必须以分号结尾. 2.数据库操作 // 1. 创建数据库,其中[]表示可以省略 CREATE { DATABASE | SCHEMA } [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; // 2. 显示当前服务器下的数据库列表 SHOW { DATABASES | SCHEMAS } [LIKE 'pattern' |