热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【博主推荐】asp.netWebService后台数据APIJSON(附源码)

文章列表【博主推荐】asp.netWebService后台数据API(附源码)代码实现webservice简单创建过程1.配置全局应用程序类Global.asax3.配置POST&

文章列表

  • 【博主推荐】asp.net WebService 后台数据API(附源码)
    • 代码实现
    • webservice简单创建过程
    • 1.配置全局应用程序类Global.asax
    • 3.配置POST,GET请求返回JOSN
    • 2.新建asmx WEB服务文件
    • 3.效果展示
      • 3.1新增api
      • 3.2修改api
      • 3.3列表api
      • 3.4删除api
      • 3.5分页列表api
    • 4.内置websocket服务端
    • 5.源码下载


【博主推荐】asp.net WebService 后台数据API(附源码)

Web service是一个基于可编程的web的应用程序,用于开发分布式的互操作的应用程序,也是一种web服务
WebService的特性有以下几点:
1.使用XML(标准通用标记语言)来作为数据交互的格式。
2.跨平台性,因为使用XML所以只要本地应用可以连接网络解析XML就可以实现数据交换,比如安卓、IOS、WindowsPhone等都可以实现对Web service的数据交互。
3.基于HTTP协议,直接跨越防火墙,通用型强;
界面中贴的代码只是主要实现流程,具体的实现方法,外部方法见项目资源源码下载


代码实现


  • 1.给前端数据提供增删改查API;
  • 2.内置使用mysql、oracle数据库,多配置,可以在配置文件自动切换需要的数据库;
  • 3.api接口过滤器机制,可以过滤自己想要过滤的请求;
  • 4.可以提供json和xml的数据格式;
  • 5.代码下载可以直接运用;
  • 6.实现不同的数据库,执行不同的sql语句;
  • 7.内含websocket服务端,接收处理客户端websocket数据;
  • 8.附带websocket客户端源码;
  • 9.带文本日志文件输出;

webservice简单创建过程


先根据这篇教程了解怎么简单创建一个web服务,以便更好深入了解
C#中WebService的创建和调用


1.配置全局应用程序类Global.asax


Application_Start 和 Application_End
第一次访问站点时,创建HttpApplication对象,此时会触发Application_Start,并创建HttpApplication实例池,应用接请求就从池中获取实例,进行处理。在所有的HttpApplication实例闲置达到超时时间,触发应用程序池回收,或者重启站点时就会触发Application_End事件,应用程序池的闲置超时时间可以在iis设置,站点下bin目录下的文件发生改变,webconfig配置改变等导致站点重启的事件都会触发Application_End。


Session_Start 和 Session_End
单个用户访问Web应用时,启动会话,服务器为该用户创建一个独立的Session对象,并触发Session_Start事件,此时Session处于可用状态。用户在该会话建立后可以发起若干次请求,当服务器一段时间内未收到用户请求,达到会话超时时间时,触发Session_End事件,服务器释放为当前用户保存Session的内存。也可以在应用程序中调用Session.Abandon()可以手动取消Session,清空服务器保存的Session,直到再次调用Session时,又会触发Session_Start,但是SessionID不会变化。所有会触发Application_End的事件都会在此之前触发Session_Start。可以在Web.Config中添加设置Session过期时间(timeout单位为分钟)。


Application_BeginRequest 和 Application_EndRequest
在用户会话启动后,每次发起的请求都会触发Application_BeginRequest事件,并在请求完成时触发Application_EndRequest事件。

Application_BeginRequest 里配置过滤#region 过滤客户端xss恶意脚本提交
if (Request.COOKIEs != null)
{if (XSSFilter.COOKIEData()){Response.Charset = ConfigurationHelperUtil.DSA_Encode;Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Response.Write(JsonUtil.getText1Json("您提交的COOKIE数据有恶意字符!"));Response.End();}
}
if (Request.UrlReferrer != null)
{if (XSSFilter.referer()){Response.Charset = ConfigurationHelperUtil.DSA_Encode;Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Response.Write(JsonUtil.getText1Json("您提交的Referrer数据有恶意字符!"));Response.End();}
}
if (Request.RequestType.ToUpper() == "POST")
{if (XSSFilter.PostData()){Response.Charset = ConfigurationHelperUtil.DSA_Encode;Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Response.Write(JsonUtil.getText1Json("您提交的Post数据有恶意字符!"));Response.End();}
}
if (Request.RequestType.ToUpper() == "GET")
{if (XSSFilter.GetData()){Response.Charset = ConfigurationHelperUtil.DSA_Encode;Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Response.Write(JsonUtil.getText1Json("您提交的Get数据有恶意字符!"));Response.End();}
}
#endregion#region 过滤参数//遍历Post参数,隐藏域除外foreach (string i in this.Request.Form){if (i == "__VIEWSTATE") continue;this.goErr(this.Request.Form[i].ToString());}//遍历Get参数。 foreach (string i in this.Request.QueryString){this.goErr(this.Request.QueryString[i].ToString());}#endregion

3.配置POST,GET请求返回JOSN

Web.config




2.新建asmx WEB服务文件

在这里插入图片描述
建好后的界面配置
在这里插入图片描述
dwsh.asmx代码

using DataServiceBLL;
using DataServiceUtil;
using System;
using System.Web.Script.Services;
using System.Web.Services;namespace DataServiceAPI.dsa.api.v1.data
{///

/// dwsh 的摘要说明/// [WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)][System.Web.Script.Services.ScriptService]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 // [System.Web.Script.Services.ScriptService]public class dwsh : System.Web.Services.WebService{#region 实例化public OperDataBLL operDataBLL = new OperDataBLL();#endregion//api接口见下面效果代码}
}

3.效果展示


3.1新增api

在这里插入图片描述
代码


#region 新增
[WebMethod(Description = "数据新增")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void add(string token, string name, string codedata, string detail)
{if (token != ConfigurationHelperUtil.DSA_TOKEN){Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(JsonUtil.getError205Json());//可json,可文本,可xmlContext.Response.End();}else{string result = "操作成功!";int code = 200;try{string sql = "";string db = ConfigurationHelperUtil.DSA_DB;int num = 0;if (db.ToUpper() == "MYSQL"){sql = "insert into SMS_TEST(NAME, CODE, DETAIL, INSERTTIME)";sql += " values('" + name + "', '" + codedata + "', '" + detail + "', now())";num = operDataBLL.OperData(sql);}else if (db.ToUpper() == "ORACLE"){sql = "insert into SMS_TEST(id,NAME,CODE,DETAIL,INSERTTIME)";sql += " values(seq_dswh_id.nextval, '" + name + "', '" + codedata + "', '" + detail + "', sysdate)";num = operDataBLL.OperOracleData(sql);}OperLogUtil.WriteFileLog("新增操作sql:" + sql, ConfigurationHelperUtil.DSA_LOG_TYPE_INFO);if (num > 0){result = "操作成功";}else{result = "未更新数据";code = 201;}}catch (Exception){result = "操作异常!";code = 202;}string resultJson = JsonUtil.getTextJson(code, result, 1, "[]");Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(resultJson);//可json,可文本,可xmlContext.Response.End();}
}
#endregion

3.2修改api

在这里插入图片描述
代码

#region 修改
[WebMethod(Description = "数据修改")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void update(string token,string id, string name, string codedata, string detail)
{if (token != ConfigurationHelperUtil.DSA_TOKEN){Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(JsonUtil.getError205Json());//可json,可文本,可xmlContext.Response.End();}else{string result = "操作成功!";int code = 200;try{string sql = "";string db = ConfigurationHelperUtil.DSA_DB;int num = 0;if (db.ToUpper() == "MYSQL"){sql = "update SMS_TEST set NAME='" + name + "', CODE= '" + codedata + "', DETAIL='" + detail + "' where id="+id;num = operDataBLL.OperData(sql);}else if (db.ToUpper() == "ORACLE"){sql = "update SMS_TEST set NAME= '" + name + "',CODE= '" + codedata + "',DETAIL= '" + detail + "' where id="+id;num = operDataBLL.OperOracleData(sql);}OperLogUtil.WriteFileLog("修改操作sql:" + sql, ConfigurationHelperUtil.DSA_LOG_TYPE_INFO);if (num > 0){result = "操作成功";}else{result = "未更新数据";code = 201;}}catch (Exception){result = "操作异常!";code = 202;}string resultJson = JsonUtil.getTextJson(code, result, 1, "[]");Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(resultJson);//可json,可文本,可xmlContext.Response.End();}
}
#endregion

3.3列表api

在这里插入图片描述
代码

#region 查询列表
[WebMethod(Description = "列表")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
//[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public void getlist(string token, string name)
{if (token != ConfigurationHelperUtil.DSA_TOKEN){Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(JsonUtil.getError205Json());//可json,可文本,可xmlContext.Response.End();}else{string result = "";try{if (name == "" || name == null || name == "null"){name = "";}else{name = " and name like '%" + name + "%'";}string sql = "select * from SMS_TEST t where 1=1" + name;string db = ConfigurationHelperUtil.DSA_DB;OperLogUtil.WriteFileLog("查询操作sql:" + sql, ConfigurationHelperUtil.DSA_LOG_TYPE_INFO);if (db.ToUpper() == "MYSQL"){result = operDataBLL.getData(sql);}else if (db.ToUpper() == "ORACLE"){result = operDataBLL.getOracleData(sql);}}catch (Exception){result = JsonUtil.getError201Json();}Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(result);//可json,可文本,可xmlContext.Response.End();}
}#endregion

3.4删除api

在这里插入图片描述
代码

#region 删除
[WebMethod(Description = "数据删除")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void del(string token, string id)
{if (token != ConfigurationHelperUtil.DSA_TOKEN){Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(JsonUtil.getError205Json());//可json,可文本,可xmlContext.Response.End();}else{string result = "操作成功!";int code = 200;try{string sql = "";string db = ConfigurationHelperUtil.DSA_DB;int num = 0;if (db.ToUpper() == "MYSQL"){sql = "delete SMS_TESTdelete from SMS_TEST where id="+id;num = operDataBLL.OperData(sql);}else if (db.ToUpper() == "ORACLE"){sql = "delete SMS_TEST where id="+id;num = operDataBLL.OperOracleData(sql);}OperLogUtil.WriteFileLog("删除操作sql:" + sql, ConfigurationHelperUtil.DSA_LOG_TYPE_INFO);if (num > 0){result = "操作成功";}else{result = "未更新数据";code = 201;}}catch (Exception){result = "操作异常!";code = 202;}string resultJson = JsonUtil.getTextJson(code, result, 1, "[]");Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(resultJson);//可json,可文本,可xmlContext.Response.End();}
}
#endregion

3.5分页列表api

在这里插入图片描述
代码

#region 查询列表分页
[WebMethod(Description = "分页列表")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
//[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public void getfyList(string token, string limit, string start, string name)
{if (token != ConfigurationHelperUtil.DSA_TOKEN){Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(JsonUtil.getError205Json());//可json,可文本,可xmlContext.Response.End();}else{string result = "";if (!StrUtil.isNum(limit) || !StrUtil.isNum(start))//验证是否合格参数{result = JsonUtil.getError203Json();}else{try{if (name == "" || name == null || name == "null"){name = "";}else{name = " and name like '%" + name + "%'";}string db = ConfigurationHelperUtil.DSA_DB;if (db.ToUpper() == "MYSQL"){//limit a,b a为开始行数 b为几行int ks = (int.Parse(start) - 1) * int.Parse(limit);string sql = "SELECT * FROM SMS_TEST WHERE 1=1" + name + " ORDER BY INSERTTIME desc LIMIT " + ks + ", " + limit;result = operDataBLL.getFyData(sql, "SMS_TEST");OperLogUtil.WriteFileLog("分页列表操作sql:" + sql, ConfigurationHelperUtil.DSA_LOG_TYPE_INFO);}else if (db.ToUpper() == "ORACLE"){string sql = "SELECT * FROM SMS_TEST WHERE 1=1" + name;//false desc true ascresult = operDataBLL.getFyOracleData(sql, "INSERTTIME", false, int.Parse(limit), int.Parse(start));OperLogUtil.WriteFileLog("分页列表操作sql:" + sql, ConfigurationHelperUtil.DSA_LOG_TYPE_INFO);}}catch (Exception){result = JsonUtil.getError201Json();}}Context.Response.Charset = ConfigurationHelperUtil.DSA_Encode;Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(ConfigurationHelperUtil.DSA_Encode);Context.Response.Write(result);//可json,可文本,可xmlContext.Response.End();}
}#endregion

4.内置websocket服务端


  • 如要启动websocket,取消这几行代码注释即可

protected void Application_Start(object sender, EventArgs e)
{//启动webScoket//Thread thread2 = new Thread(new ThreadStart(WebScoket.startWebScoket));//创建线程//thread2.Start(); //启动线程//WebScoket.startWebScoket();//用于CMS}

  • websocket代码

using DataServiceBLL;
using DataServiceUtil;
using Newtonsoft.Json.Linq;
using StriveEngine;
using StriveEngine.Core;
using StriveEngine.Tcp.Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
namespace DataServiceAPI.App_Code
{public class WebScoket{private static ITcpServerEngine tcpServerEngine;private static bool hasTcpServerEngineInitialized;public static OperDataBLL operDataBLL = new OperDataBLL();public static void startWebScoket(){OperLogUtil.WriteFileLog("启动WebScoket", ConfigurationHelperUtil.DSA_LOG_TYPE_WEBSCOKET);try{if (tcpServerEngine == null){tcpServerEngine = NetworkEngineFactory.CreateTextTcpServerEngine(int.Parse(ConfigurationHelperUtil.DSA_WebScoket), new DefaultTextContractHelper("\0"));//DefaultTextContractHelper是StriveEngine内置的ITextContractHelper实现。使用UTF-8对EndToken进行编码。 }if (hasTcpServerEngineInitialized){tcpServerEngine.ChangeListenerState(true);}else{InitializeTcpServerEngine();}}catch (Exception ee){OperLogUtil.WriteFileLog(ee.Message, ConfigurationHelperUtil.DSA_LOG_TYPE_ERROR);}}public static void InitializeTcpServerEngine(){tcpServerEngine.ClientCountChanged += new CbDelegate(tcpServerEngine_ClientCountChanged);tcpServerEngine.ClientConnected += new CbDelegate(tcpServerEngine_ClientConnected);tcpServerEngine.ClientDisconnected += new CbDelegate(tcpServerEngine_ClientDisconnected);tcpServerEngine.MessageReceived += new CbDelegate(tcpServerEngine_MessageReceived);tcpServerEngine.Initialize();hasTcpServerEngineInitialized = true;}public static void tcpServerEngine_ClientCountChanged(int count){OperLogUtil.WriteFileLog("在线数量: " + count, ConfigurationHelperUtil.DSA_LOG_TYPE_WEBSCOKET);}public static void tcpServerEngine_ClientConnected(System.Net.IPEndPoint ipe){string msg = string.Format("{0} 上线", ipe);OperLogUtil.WriteFileLog(msg, ConfigurationHelperUtil.DSA_LOG_TYPE_WEBSCOKET);}public static void tcpServerEngine_ClientDisconnected(System.Net.IPEndPoint ipe){string msg = string.Format("{0} 下线", ipe);OperLogUtil.WriteFileLog(msg, ConfigurationHelperUtil.DSA_LOG_TYPE_WEBSCOKET);}public static void tcpServerEngine_MessageReceived(IPEndPoint client, byte[] bMsg){string msg = System.Text.Encoding.UTF8.GetString(bMsg); //消息使用UTF-8编码msg = msg.Substring(0, msg.Length - 1); //将结束标记"\0"剔除OperLogUtil.WriteFileLog("收到:" + client.Address + ":" + msg, ConfigurationHelperUtil.DSA_LOG_TYPE_WEBSCOKET);#region 处理接收到的数据//此处处理接收到的数据#endregion}#region 根据客户端推送单条信息public static void sendInfo(IPEndPoint client, string msg){try{msg = msg + "\0";// "\0" 表示一个消息的结尾byte[] bMsg = System.Text.Encoding.UTF8.GetBytes(msg);//消息使用UTF-8编码tcpServerEngine.SendMessageToClient(client, bMsg);}catch (Exception ee){OperLogUtil.WriteFileLog(ee.Message, ConfigurationHelperUtil.DSA_LOG_TYPE_ERROR);}}#endregion#region 推送消息,推送所有在线的客户端public static void sendInfoAll(string msg){try{List list = tcpServerEngine.GetClientList();//获取在线设备if (list.Count > 0){for (int i = 0; i }

5.源码下载

【博主推荐】asp.net WebService 后台数据API JSON(附源码)


推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
author-avatar
pfm4191006
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有