当前位置: 首页 > 编程日记 > 正文

NET Framework 2.0中的数据访问新特性

1异步数据访问
  a)支持异步数据编程
  b)SqlConnection
    – BeginOpen
    – EndOpen 
  c)SqlCommand
    – BeginExecuteNonQuery
    – BeginExecuteReader
    – BeginExecuteXmlReader
    – EndExecuteNonQuery
    – EndExecuteReader
    – EndExecuteXmlReader
代码如下:(注意字符串连接,Asynchronous Processing=true)

View Code
public partial class Form1 : Form{public Form1(){InitializeComponent();}delegate void PopulateListEventHandler(SqlDataReader reader);SqlConnection conn;SqlCommand comm;private void button2_Click(object sender, EventArgs e){conn = new SqlConnection(ConfigurationManager.ConnectionStrings["AdventureWorks"].ConnectionString);comm = conn.CreateCommand();comm.CommandType = CommandType.Text;comm.CommandText = "SELECT Name FROM Production.Product";conn.Open();comm.BeginExecuteReader(new AsyncCallback(HandleAsyncCallBack), null);this.label1.Visible = true;this.button2.Enabled = false;}public void HandleAsyncCallBack(IAsyncResult result){System.Threading.Thread.Sleep(5000);SqlDataReader reader = comm.EndExecuteReader(result);this.Invoke(new PopulateListEventHandler(populateList), reader);}void populateList(SqlDataReader reader){while (reader.Read()){this.comboBox2.Items.Add(reader[0]);}reader.Close();conn.Close();this.comboBox2.SelectedIndex = 0;this.label1.Visible = false;this.button2.Enabled = true;}}

2.多活动结果集(MARKS)
  a)在SQL Server 2005 中支持多活动结果集
  b)允许在单个连接上执行多个批处理
  c)启用MARS
    string connectionString = "Data Source=MSSQL1;" + "Initial Catalog=AdventureWorks;Integrated Security=SSPI; MultipleActiveResultSets=True";

代码如下:

View Code
public partial class Form1 : Form{public Form1(){InitializeComponent();}SqlConnection conn;private void listOrdersButton_Click(object sender, EventArgs e){//Open the connection (if not already open) and retrieve all order headersif (conn.State != ConnectionState.Open){conn.Open();}SqlDataReader orderReader;SqlCommand getOrders = new SqlCommand("SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE SalesOrderID > 70000", conn);orderReader = getOrders.ExecuteReader();while (orderReader.Read()){orderListBox.Items.Add(orderReader["SalesOrderID"]);}//Select the first order and display the products it containsorderListBox.SelectedIndex = 0;DisplayProducts(orderListBox.SelectedItem.ToString());}private void orderListBox_SelectedIndexChanged(object sender, EventArgs e){DisplayProducts(orderListBox.SelectedItem.ToString());}private void DisplayProducts(string OrderID){//Open the connection if it's closed, otherwise just use itif (conn.State != ConnectionState.Open){conn.Open();}//Display the products for the selected order
            SqlDataReader detailReader;SqlCommand getDetails = new SqlCommand("SELECT ProductID FROM Sales.SalesOrderDetail WHERE SalesOrderID = " + OrderID, conn);detailReader = getDetails.ExecuteReader();detailListBox.Items.Clear();while (detailReader.Read()){detailListBox.Items.Add(detailReader["ProductID"]);}conn.Close();}private void Form1_Load(object sender, EventArgs e){conn = new SqlConnection();conn.ConnectionString = "SERVER=localhost;DATABASE=AdventureWorks;INTEGRATED SECURITY=true; MIN POOL SIZE=2; MAX POOL SIZE=10;MultipleActiveResultSets=true;";}}

3.批量复制操作
  a)Microsoft SQL Server 包含名为bcp的常用命令行应用程序,
    用于快速将大文件批量复制到SQL Server 数据库的表或视图中。
  b)使用SqlBulkCopy 类可以编写提供类似功能的托管代码解决方案。
  c)还可以通过其他方式将数据加载到SQL Server 表中(例如INSERT 语句),
    但是SqlBulkCopy 提供的性能要明显优于这些方式。
代码如下(此处只做演示):

View Code
public partial class Form1 : Form{        public Form1(){//This call is required by the Windows Form Designer.
            InitializeComponent();}private void bulkCopyForm_Load(System.Object sender, System.EventArgs e){//Use a utility function to create the destination database for the sample
            CreateDestination();}private void copyDataButton_Click(System.Object sender, System.EventArgs e){// Retrieve data from the source server.SqlConnection sourceConn = new SqlConnection("SERVER=localhost;DATABASE=AdventureWorks;INTEGRATED SECURITY=true;");SqlDataAdapter dA = new SqlDataAdapter("SELECT ProductID, Name, ListPrice FROM Production.Product", sourceConn);DataSet ds = new DataSet();dA.Fill(ds, "Products");// Connect to the destination server.SqlConnection destConn = new SqlConnection("SERVER=localhost;DATABASE=AWProductsData;Integrated Security=TRUE");destConn.Open();//count the existing rowsSqlCommand verifyCmd = new SqlCommand("SELECT COUNT(*) FROM dbo.Products", destConn);int initialCount = System.Convert.ToInt32(verifyCmd.ExecuteScalar());//Perform the copy operationusing (SqlBulkCopy bcp = new SqlBulkCopy(destConn)){bcp.DestinationTableName = "dbo.Products";// Note that if column names matched, no mappings would be needed.bcp.ColumnMappings.Add("ProductID", "ProductCode");bcp.ColumnMappings.Add("Name", "ProductName");bcp.ColumnMappings.Add("ListPrice", "Price");bcp.WriteToServer(ds.Tables["Products"]);}//Verify the data transferint postCopyCount = System.Convert.ToInt32(verifyCmd.ExecuteScalar());int copiedRows = postCopyCount - initialCount;MessageBox.Show(copiedRows.ToString() + " rows copied");destConn.Close();}#region "Utility code"private void CreateDestination(){try{using (SqlConnection conn = new SqlConnection("SERVER=localhost;DATABASE=master;INTEGRATED SECURITY=true")){conn.Open();SqlCommand SqlCmd = new SqlCommand("CREATE DATABASE AWProductsData", conn);SqlCmd.ExecuteNonQuery();SqlCmd.CommandText = "CREATE TABLE AWProductsData.dbo.Products (ProductCode integer, ProductName nvarchar(40), Price money)";SqlCmd.ExecuteNonQuery();conn.Close();}}catch (Exception Ex){MessageBox.Show(Ex.Message);}}#endregion}

4)批处理更新
  a)在上一个版本的ADO.NET 当中,SqlDataAdapter的Update方法
    将会为DataSet当中的每一行调用一次更新操作。
  b)在ADO.NET 2.0中,您可以设置UpdateBatchSize 属性,在单步中执行多个更新。
    这样,可以提高数据更新的效率。
  c)UpdateBatchSize 的默认值为1 使得默认的更新行为与以前版本的ADO.NET 一致。

代码如下:

View Code
public partial class Form1 : Form{public Form1(){conn = new SqlConnection(ConfigurationManager.ConnectionStrings["AWConnectionString"].ConnectionString);dAdapt = new SqlDataAdapter("SELECT ProductID, Name, ListPrice FROM Production.Product", conn);InitializeComponent();}SqlConnection conn;SqlDataAdapter dAdapt;DataSet dSet = new DataSet();StringBuilder logString = new StringBuilder("");private void batchUpdateForm_Load(System.Object sender, System.EventArgs e){dAdapt.RowUpdating += OnRowUpdating;dAdapt.RowUpdated += OnRowUpdated;}private void getDataButton_Click(System.Object sender, System.EventArgs e){dAdapt.Fill(dSet, "Product");productGrid.DataSource = dSet.Tables["Product"];}private void updateDataButton_Click(System.Object sender, System.EventArgs e){SqlCommandBuilder cb = new SqlCommandBuilder(dAdapt);logString.Remove(0, logString.Length);// Enable batching by setting batch size != 1.dAdapt.UpdateBatchSize = int.Parse(batchSizeTextBox.Text);// Execute the update.dAdapt.Update(dSet.Tables["Product"]);MessageBox.Show(logString.ToString());}//handler for the RowUpdating eventpublic void OnRowUpdating(object sender, SqlRowUpdatingEventArgs e){logString.AppendLine("Starting row update");}// handler for RowUpdated eventpublic void OnRowUpdated(object sender, SqlRowUpdatedEventArgs e){logString.AppendLine("Completed row update");}}

5)通知
  a)SQL Server 2005 中的查询通知可以在数据修改时
    通知客户端应用程序
  b)ADO.NET 提供两种方式来利用查询通知功能:
    – 使用SqlDependency类,并处理OnChanged事件
    – 使用SqlNotifcationRequest 类,使用它可以用来访问自定义通知队列

代码如下:

View Code
public partial class Form1 : Form{public Form1(){conn = new SqlConnection(ConfigurationManager.ConnectionStrings["AWConnectionString"].ConnectionString);cmd = new SqlCommand("SELECT ProductID, Name, ListPrice FROM Production.Product", conn);dep = new SqlDependency(cmd);InitializeComponent();}SqlConnection conn;SqlCommand cmd;SqlDependency dep;delegate void PopulateList();private void notificationForm_Load(System.Object sender, System.EventArgs e){//Assign the event handler for the dependency's OnChanged eventdep.OnChange += new System.Data.SqlClient.OnChangeEventHandler(OnDependencyChanged);SqlDependency.Start(conn.ConnectionString);//Retrieve the initial data
            ListProducts();}public void OnDependencyChanged(object sender, SqlNotificationEventArgs e){//Event handler for OnChanged event of Dependency
            DialogResult dR;dR = MessageBox.Show("The data has changed. Refresh?", e.Info.ToString(), MessageBoxButtons.YesNo, MessageBoxIcon.Question);if (dR == System.Windows.Forms.DialogResult.Yes){//Refresh the datathis.Invoke(new PopulateList(ListProducts));}}public void ListProducts(){productListBox.Items.Clear();conn.Open();SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){productListBox.Items.Add(reader["Name"].ToString() + ": " + reader["ListPrice"].ToString());}conn.Close();}}

6)快照隔离级别
  a)SQL Server 2005 提供了快照隔离级别,用户可以访问行中上一个已提交的版本
  b)ADO.NET SqlTransaction 类技术一个新的IsolationLevel Snapshot枚举值
    使得ADO.NET 客户端应用程序可以利用快照隔离级别

c)先在数据库上启用

ALTER DATABASE AdventureWorks
      SET ALLOW_SNAPSHOT_ISOLATION ON

代码如下:

View Code
    public partial class Form1 : Form{public Form1(){conn = new SqlConnection(ConfigurationManager.ConnectionStrings["AWConnectionString"].ConnectionString);InitializeComponent();}SqlConnection conn;SqlCommand cmd = new SqlCommand();SqlTransaction tran;private void snapshotForm_Load(System.Object sender, System.EventArgs e){try{conn.Open();//Start a transaction using snapshot isolationtran = conn.BeginTransaction(IsolationLevel.Snapshot);cmd.Connection = conn;cmd.Transaction = tran;RetrieveData();}catch (Exception Ex){MessageBox.Show(Ex.Message);}}private void updateButton_Click(System.Object sender, System.EventArgs e){try{//update the datacmd.CommandText = "Update Production.Product SET ListPrice = ListPrice + 2 WHERE ProductID = 1";cmd.ExecuteNonQuery();RetrieveData();}catch (Exception Ex){MessageBox.Show(Ex.Message);}}private void commitButton_Click(System.Object sender, System.EventArgs e){try{//commit the transaction
                tran.Commit();conn.Close();}catch (Exception Ex){MessageBox.Show(Ex.Message);}}public void RetrieveData(){productListBox.Items.Clear();cmd.CommandText = "SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID < 10";SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){productListBox.Items.Add(reader["Name"].ToString() + ": " + reader["ListPrice"].ToString());}reader.Close();}}

7)数据库镜像
  a)服务器角色
    – 主服务器
      存储主数据库的服务器
      用户连接到服务器
    – 镜像服务器
      存储镜像数据库的服务器
      在主服务器出现故障后,用户连接到该服务器
    – 见证服务器
      在主服务器与镜像服务器之间它们的监视连通性
8)配置客户端应用程序
  a)使用.NET Framework 2.0进行开发
  b)连接字符串: 连接字符串:
    – 只需要添加“failover partner”参数
    – 例如: connectionString="server=(local);database=AdventureWorks;Integrated Security=true;Failover Partner=(local)\MIRROR"

代码如下(注意链接字符串):

View Code
    static class Program{/// <summary>/// 应用程序的主入口点。/// </summary>static void Main(){SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["AdventureWorks"].ConnectionString);while (true){try{conn.Open();SqlCommand comm = conn.CreateCommand();comm.CommandType = CommandType.Text;comm.CommandText = "SELECT @@ServerName";Console.WriteLine(comm.ExecuteScalar().ToString());Thread.Sleep(2000);conn.Close();}catch (Exception e){Console.WriteLine(e.Message);}}}}

相关文章:

【网络】通讯名词解释:带宽、速率、波特率、奈奎斯特定律、香农定理

1、带宽 1.1 解释一 带宽&#xff0c;又叫频宽&#xff0c;是数据的传输能力&#xff0c;指单位时间内能够传输的比特数。高带宽意味着高能力。 数字设备中带宽用bps(b/s)表示&#xff0c;即每秒最高可以传输的位数。 模拟设备中带宽用Hz表示&#xff0c;即每秒传送的信号周期…

这可能是最全的机器学习工具手册!

作者 | 红色石头转载自 AI有道&#xff08;ID:redstonewill&#xff09;工欲善其事必先利其器&#xff01;之前我也断断续续给大家发文整理过一些关于数据科学&#xff0c;尤其是机器学习、深度学方面的速查手册&#xff01;但是&#xff0c;每次分享的都比较是针对某一块的内容…

保持分布式团队同步

分布式团队最大的挑战是沟通&#xff0c;这对建立协作的基本原则必不可少。调整工作时间&#xff0c;互相适应&#xff0c;而团队联络员有助于沟通和同步工作。以信任、尊重和开明为基础的团队会鼓励组织中的人们互相帮助&#xff0c;培养一种使团队保持同步的文化。\\SkuVault…

Word2010开发——操作文档

参考&#xff1a; http://blog.csdn.net/akipeng/article/details/6534375 http://www.haogongju.net/art/19029 首先建立一个Word外接程序&#xff08;Word AddIn&#xff09;&#xff08;家里的Vs竟然是中文版&#xff0c;汗&#xff01;&#xff09; 接着在项目中新增项&…

【驱动】ubuntu安装内核头文件

1、检查是否已经安装 使用dpkg-query命令检查是否有可用的内核头文件。 $ dpkg-query -s linux-headers-$(uname -r) 如果输出显示install ok installed说明已经安装成功 Package: linux-headers-4.15.0-142-generic Status: install ok installed2、安装内核头文件 $ sudo…

嫌Terminal终端太单调?快收下这几个有趣的改造工具!

整理 | Rachel责编 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导语】Terminal&#xff08;终端&#xff09;是程序员常用的工具之一&#xff0c;常用于系统的相关配置修改。系统自带的 terminal 较为简单&#xff0c;很多 Github 的开源项目都尝试对终端…

关于matlab向文件写入数据的方法——留着备用

MATLAB数据采集的时候&#xff0c;往往需要把得到的数据保存下来。 fid fopen(文件名&#xff0c;‘打开方式’)&#xff1b; 说明&#xff1a;fid用于存储文件句柄值&#xff0c;如果fid>0&#xff0c;这说明文件打开成功。打开方式有如下选择&#xff1a; ‘r’&#xff…

js在页面滚动到一定位置时触发事件?

function getTop(e) {var offsete.offsetTop;if(e.offsetParent!null) //只要还有父元素,也就是当前元素不是根节点就继续往上累计元素的高度offsetgetTop(e.offsetParent);return offset; } var myBlockTop getTop(document.getElementById("homepageBanner")); va…

【C语言】学习笔记3——字符串

1. 字符串&#xff08;charcacter string&#xff09;是一个或多个字符的序列 2. C语言没有专门用于存储字符串的变量类型。字符串都被存储在char类型的数组种。 3. 数组由连续的存储单元组成&#xff0c;字符串种的字符被存储在相邻的存储单元中&#xff0c; 每个单元存储一个…

Facebook 的AI翻身之战!

作者 | Michael K. Spencer译者 | 王艳妮&#xff0c;责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;Facebook最近举办了F8会议&#xff0c;这是了解这个平台未来发展的绝佳机会。 F8是Facebook的年度开发者大会——一个为期数日的活动&#xff0c;期间…

【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)

0、wifi模块型号 在win10下设备管理器中查看&#xff0c;型号为&#xff1a;Realtek 8821CE Wireless LAN 802.11ac PCI-E NIC 1、问题描述 在ThinkPad上安装win10ubuntu16.04双系统后&#xff0c;在win10下wifi可以正常使用&#xff0c;但是在ubuntu下没有wifi列表。 2、…

关于Linux的inode和dentry的一组文章

先mark一下&#xff0c;有时间再看。 http://www.ruanyifeng.com/blog/2011/12/inode.htmlhttp://teaching.idallen.com/dat2330/04f/notes/links_and_inodes.htmlhttp://www.thegeekstuff.com/2012/01/linux-inodes/http://blog.chinaunix.net/uid/7828352/frmd/-1.htmlhttp:/…

为什么Rust连续4年获“最受喜爱编程语言”?

作者 | Mike Tang责编 | Aholiab出品 | 区块链大本营&#xff08;blockchain_camp)2015年5月15日&#xff0c;Rust编程语言核心团队正式宣布发布Rust 1.0版本。4年来&#xff0c;它优雅的解决高并发和高安全性系统问题的能力&#xff0c;受到了越来越多开发者的喜爱。并且连续4…

【Windows】清除win10开始菜单中失效打程序标签

1、问题描述 安装新版本Qt程序&#xff0c;卸载旧版本Qt后&#xff0c;在开始菜单中&#xff0c;还有残留&#xff0c;但是已经失效&#xff0c;需要删除这些失效的程序标签。 2、显示隐藏文件夹 打开此电脑——查看——勾选“隐藏项目”&#xff1a; 3、删除失效的程序标签…

解析equals(Object obj)和compareTo(T obj)

背景&#xff1a;最近在研究静态扫描的东西&#xff0c;遇到一个规则&#xff1a;"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method 然后就想深度扒一扒equals和compareTo有什么区别 1.java.lang.Object是所有类的父类…

安装和部署Exchange Server 2007

为什么Exchange Server 2007使用服务器角色? 简化部署和管理 增强可扩展性 改进安全性 见下图:什么是邮箱服务器角色? 邮箱服务器角色: 存储用户邮箱和公共文件夹 通过群集, LCR, CCR实现高可用性 并不在邮箱之间转输邮件邮箱服务器: 不应该能从Internet直接访问 必须是活动…

AI时代,中国技术创新如何弯道超车?

2019 年 5 月 26 日 - 27 日&#xff0c;杭州国际博览中心&#xff0c;由工信部人才交流中心指导&#xff0c;CSDN 和数字经济人才发展中心主办的 CTA 核心技术及应用峰会圆满落下帷幕。本次大会聚焦机器学习、知识图谱等 AI 领域的热门技术&#xff0c;关注技术在行业中的实践…

【TX2】英伟达Nvidia TX2连接蓝牙设备

1、问题描述 买了一个蓝牙键盘&#xff08;航世B.O.W 折叠键盘HB099&#xff0c;200大洋&#xff09;&#xff0c;尝试在连接TX2的蓝牙&#xff0c;试试好使不 2、安装蓝牙 Blueman 是一个适合在 GNOME 桌面环境使用的图形化蓝牙管理工具。 sudo apt-get install blueman b…

usermod

功能说明&#xff1a;用于修改系统已经存在的用户账号信息。 参数选项&#xff1a;-c comment 修改用户password文件中用户说明栏&#xff0c;同useradd -c功能。-d home_dir 修改用户每次登入时所使用的家目录&#xff0c;同useradd -d功能。-e expired_date 修改用户终止日期…

asp.net 获取当前时间的格式

在平时的编程中&#xff0c;经常会用到获取当前的系统时间&#xff0c;格式也很特定&#xff0c;今天就把一些格式整理了一下&#xff0c;贴出来&#xff0c;以便以后的使用。 //获取日期时间 DateTime.Now.ToString(); // 2008-9-4 20:02:10 DateTime.Now.ToLocalT…

史上最大规模ACL大会放榜,百度10篇NLP论文被录用!

近日&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域的国际顶级学术会议“国际计算语言学协会年会”&#xff08;ACL 2019&#xff09;公布了今年大会论文录用结果。根据 ACL 2019 官方数据&#xff0c;今年大会的有效投稿数量达到 2694 篇&#xff0c;相比去年的 15…

【Ubuntu】安装Ubuntu+Win双系统后,每次开机默认是进入Ubuntu,如何设置成默认进入Win?

1、问题描述 安装UbuntuWin双系统后&#xff0c;每次开机默认是进入Ubuntu&#xff0c;如何设置成默认进入Win&#xff1f; 2、解决方法 1&#xff09;记住开机选择中windows 10是第几个&#xff0c;从0开始记&#xff0c;如下图本人的是4 2&#xff09;进入ubuntu系统&am…

MFC 多线程及线程同步

一、MFC对多线程编程的支持 MFC中有两类线程&#xff0c;分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环&#xff0c;而用户界面线程有自己的消息队列和消息循环。  工作者线程没有消息机制&#xff0c;通常用来执行后台计算和维护任务&…

太火!这本AI图书微软强推,程序员靠它拿下50K!

如何能够短时间内抓住技术重点&#xff0c;集中突击&#xff1f;如何不在惧怕“算法”&#xff1f;如何才能在面试中对答如流&#xff0c;打造属于自己的“offer收割机”&#xff1f;也许这本书——《百面机器学习 算法工程师带你去面试》就能帮你实现&#xff01;《百面机器学…

【Qt】错误处理:error: undefined reference to `qMain(int, char**)‘

1、问题描述 在一次编译Qt项目时,报错 H:\Qt\Qt5.14.2\5.14.2\mingw73_32\lib\libqtmain.a(qtmain_win.o):-1: In function `WinMain@16: C:\Users\qt\work\qt\qtbase\src\winmain\

Android WebView与ViewPager的滑动冲突分析

前言 如题所述&#xff0c;我使用的架构是ViewPagerFragmentWebView进行开发的&#xff0c;由于WebView的html页面代码是第三方的&#xff0c;这里不好放出来&#xff0c;所以只能放一个大致的架构图&#xff0c;如图所示&#xff0c;ViewPager包含了两个fragment,可以左右滑动…

关于outlook2010帐户设置

安装了office2010后&#xff0c;首次使用outlook&#xff0c;关于帐户设置&#xff0c;以qq邮件为例 开启imap服务2.打开outlook2010软件 由于有文字限制&#xff0c;其他的图解请链接http://wlinfang.blog.51cto.com/2961560/902193转载于:https://blog.51cto.com/wlinfang/90…

如何构建可解释的推荐系统?| 深度

作者 | gongyouliu来源 | 大数据与人工智能&#xff08;ID&#xff1a;ai-big-data&#xff09;推荐系统的目标是为用户推荐可能会感兴趣的标的物。通过算法推荐达到节省用户时间、提升用户满意度、为公司创造更多的商业价值的目的。要想达到这个目的就需要让用户信任你的推荐系…

【Qt】获取、比较Qt版本的宏和函数

1、版本号宏定义 版本号宏定义在QtCore\qconfig.h中,以Qt5.14.2为例 #define QT_VERSION_STR "5.14.2" #define QT_VERSION_MAJOR 5 #define QT_VERSION_MINOR 14 #

Spring Cloud企业微服务分布式云架构技术点整合

spring cloud本身提供的组件就很多&#xff0c;但我们需要按照企业的业务模式来定制企业所需要的通用架构...下面我针对于spring cloud微服务分布式云架构做了以下技术总结&#xff0c;希望可以帮助到大家&#xff1a;View&#xff1a; H5、Vue.js、Spring Tag、React、angular…