分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

netcore获取数据

发布时间:2023-09-06 01:59责任编辑:胡小海关键词:暂无标签

之前都是用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是不是特别舒服呢,比原先那么一大坨的代码爽多了;

netcore获取数据

原文地址:https://www.cnblogs.com/huanyun/p/9157799.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved