• netcore获取数据


    之前都是用EF,需要绑定模型,后来发现很多时候数据列都需要更改,又不好去改模型,肯定没有SQL语句来的方便,要是复杂点视图的话,那更是坑爹了,写都写不出来,后来就写了几个方法

    public async Task<JArray> QueryScalarList(string sql)
            {
                JArray x = new JArray();
                try
                {
                    using (var con = Database.GetDbConnection())
                    {
                        if (con.State == System.Data.ConnectionState.Closed) con.Open();
    
                        var cmd = con.CreateCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = sql;
                        var reader = await cmd.ExecuteReaderAsync();
                        while (reader.Read())
                        {
                            JObject y = new JObject();
                            for (var i = 0; i < reader.FieldCount; i++)
                            {
                                var name = reader.GetName(i);
                                y[name] = reader[i].ToString();
                            }
                            x.Add(y);
                        }
                        cmd.Dispose();
                        con.Close();
                        con.Dispose();
                    }
                    return x;
                }
                catch (Exception e)
                {
                    return x;
                }
            }

    其他的服务调用

    public async Task<JArray> GetList(string field, string view, string where, string orderby, int page = -1, int pagesize = int.MaxValue)
            {
                try
                {
                    var p = (page - 1) * pagesize;
                    string sql = "";
                    string q_where = "", q_orderby = "";
                    if (!string.IsNullOrWhiteSpace(where)) q_where = " where " + where;
                    if (!string.IsNullOrWhiteSpace(orderby)) q_orderby = " order by " + orderby;
                    sql = "select " + field + " from " + view + q_where + q_orderby + " limit " + p.ToString() + "," + pagesize.ToString();
                    string sql2 = TypeCheck.SqlExpr(sql);
                    var data = await _context.QueryScalarList(sql2);
                    return data;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }

    哈,贼方便,放在API里,服务里还是可以做其他加工的,

    还有一个是关于SP的,也做了下包装;

    public async Task<JArray> QueryScalarSPList(string spname, MySqlParameter[] mySqlParameters = null)
            {
                JArray x = new JArray();
                try
                {
                    using (var con = Database.GetDbConnection())
                    {
                        if (con.State == System.Data.ConnectionState.Closed) con.Open();
    
                        var cmd = con.CreateCommand();
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.CommandText = spname;
                        cmd.Parameters.AddRange(mySqlParameters);
                        var reader = await cmd.ExecuteReaderAsync();
                        while (reader.Read())
                        {
                            JObject y = new JObject();
                            for (var i = 0; i < reader.FieldCount; i++)
                            {
                                var name = reader.GetName(i);
                                y[name] = reader[i].ToString();
                            }
                            x.Add(y);
                        }
                        cmd.Dispose();
                        con.Close();
                        con.Dispose();
                    }
                    return x;
                }
                catch (Exception e)
                {
                    return x;
                }
            }

    服务里调用这个的时候,需要加下工

    public async Task<JArray> GetSPList(string spname, object parameters)
            {
                try
                {
                    Type type = parameters.GetType();
                    PropertyInfo[] propertyInfo = type.GetProperties();
                    var len = propertyInfo.Length;
                    MySqlParameter[] myparameters = new MySqlParameter[len];
                    for (var i = 0; i < propertyInfo.Length; i++)
                    {
                        var x = propertyInfo[i].PropertyType.ToString();
                        if (x.Contains("int"))
                        {
                            myparameters[i] = new MySqlParameter(propertyInfo[i].Name, MySqlDbType.Int32);
                        }
                        else
                        {
                            myparameters[i] = new MySqlParameter(propertyInfo[i].Name, MySqlDbType.VarChar, 300);
                        }
                        myparameters[i].Value = propertyInfo[i].GetValue(parameters);
                    }
    
                    var data = await _context.QueryScalarSPList(spname, myparameters);
                    return data;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }

    因为业务原因,就没做更多判断,只判断Int和varchar格式,有需要的自己增加判断吧;

    调用服务的时候,特别爽快,

    var data = await _serviceCommon.GetSPList("xxxxxx", new { userid_p = userid, searchValue_p = username, page, pageSize = pagesize });

    SQL语句调用服务

    var data = await _serviceCommon.GetList("*", "(select a.* from xxxxa) m", "(xx like '%" + aa + "%' or xxxx like '%" + bb + "%')", "id", page, pagesize);

    返回的JArray是不是特别舒服呢,比原先那么一大坨的代码爽多了;

  • 相关阅读:
    洛谷 P2700 逐个击破
    洛谷 P1503 鬼子进村
    洛谷 P1556 幸福的路
    洛谷 P1490 买蛋糕
    洛谷 P2507 [SCOI2008]配对
    code vs 3305 水果姐逛水果街Ⅱ
    通过idea远程调试
    【Cocos2d-x JavaScript Binding】
    ☀【SeaJS】SeaJS Grunt构建
    -_-#【Better Code】throttle / debounce
  • 原文地址:https://www.cnblogs.com/huanyun/p/9157799.html
Copyright © 2020-2023  润新知