• c#一步一步实现ORM(二)


    c#一步一步实现ORM(二)

     

      上一篇描述了简单的思路,这一片我们来稍微细化一下

    1插入的时候忽略某些字段

           public int Insert<T>(T o, params string[] except)
            {
    
    //有时候我们添加的时候只想添加部分字段,或者有的字段是自增的方式,那么要去掉这个字段(在sqlserver里面是这样,在mysql里面 是插入 null)
    
                try
                {
    
                    Type type = typeof(T);
                    var tablename = "dbo.[" + typeof(T).Name + "]";
    
    
                    string fields = "";
                    string values = "";
                    List<SqlParameter> paras = new List<SqlParameter>();
    
    
                    object v = null;
                    foreach (var item in type.GetProperties())
                    {
    
    
    
                        bool flag = true;
    
    
    
                        if (except != null && except.Contains(item.Name))
                        {
    
                            flag = false;
                        }
    
    
                        if (flag)
                        {
                            v = item.GetValue(o, null);
                            if (v != null)
                            {
                                fields += "," + "[" + item.Name + "]";
                                values += ",@" + item.Name;
                                paras.Add(new SqlParameter("@" + item.Name, v));
                            }
                        }
                    }
                    string sql = string.Format("insert into  {0} ({1}) values({2})", tablename, fields.Substring(1), values.Substring(1));
    
                    return ExcuteSql(sql, paras);
                }
                catch (Exception e)
                {
                    Console.Write(e.ToString());
                    return 0;
                }
    
            }
    

    2批量插入

           public int InsertArray<T>(IEnumerable<object> o, params string[] except)
            {
                if (o.Count() == 0)
                {
    
                    return 0;
                }
    
    
                Type type = typeof(T);
                var tablename = "dbo.[" + typeof(T).Name + "]";
                List<SqlParameter> paras = new List<SqlParameter>();
    
    
                string sql = "";
    
                int count = 0;
                foreach (var i in o)
                {
                    count++;
                    string fields = "";
                    string values = "";
    
    
    
                    //object v = null;
                    foreach (var item in type.GetProperties())
                    {
    
                        bool flag = false;
    
                     
                        if (!flag)
                        {
                            var vitem = item.GetValue(i, null);
    
                            if (vitem != null)
                            {
                                fields += ",[" + item.Name + "]";
                                values += ",@" + count + item.Name;
    
                                paras.Add(new SqlParameter("@" + count + item.Name, vitem));
                            }
                        }
    
                    }
    
    
                    sql += string.Format("insert into  {0} ({1}) values({2});", tablename, fields.Substring(1), values.Substring(1));
                }
    
    
    
                return ExcuteSql(sql, paras);
    
    
    
            }

      

       private int ExcuteSql(string sql, IEnumerable<SqlParameter> paras)
            {
                using (SqlConnection conn = new SqlConnection(this.sqlConnStr))
                {
    
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
    
                    cmd.CommandText = sql;
    
                    cmd.Parameters.AddRange(paras.ToArray());
    
                    conn.Open();
                    int flag = 0;
                    try
                    {
    
    
                        flag = cmd.ExecuteNonQuery();
    
    
                    }
                    catch (Exception e)
                    {
                        throw e;
                       
                    }
                    conn.Close();
                    return flag;
                }
            }
    

      下一篇我们开始学习修改,删除,和解析lambda表达式

     

  • 相关阅读:
    composer "Failed to decode zlib stream"
    敏捷开发 角色英文简称
    MySQL索引背后的数据结构及算法原理 (转)
    Jenkins mac pkg安装 后默认配置文件/启动路径
    react componentWillReceiveProps 使用注意
    charles https抓包 (安卓安装证书)
    error_reporting()
    PHP开发API接口及使用
    封装pdo单例模式类
    php 将多个txt文件合并成
  • 原文地址:https://www.cnblogs.com/jimsfriend/p/9274100.html
Copyright © 2020-2023  润新知