Microsoft 数据访问技术总结

10、 探索Microsoft Access中的数据访问技术 本文全面介绍了Microsoft Access中的数据访问技术,包括Jet和ACE数据库引擎的特性、数据访问方法(如ODBC/OLEDB)、DAO和ADO对象库的使用、数据库连接与错误处理、数据库安全设置(如密码保护和用户级安全)、数据库压缩与修复以及查询操作等。通过学习这些技术,开发者可以更高效地管理和操作Access数据库。 阅读详情

1         Win32(本机)数据访问技术

数据技术

发布时间

背景

DB-Library

1989年

SQL Server 1.0的诞生

Embedded SQL for C

1989年

SQL Server 1.0的诞生

ODBC

1992年9月

为不同类型的数据库访问提供一个统一的接口

Data Access Objects

1992年11月

面向对象技术的兴起及Visual Basic 3的发布

Remote Data Objects

1995年8月

Visual Basic 4的发布,取代DAO

OLE DB

1996年8月

提供一种适合某些开发风格的编程模型

ActiveX Data Object

1996年10月

建立在 OLE DB上的更高级的对象抽象

 







1.1   DB-Library

  1989年Microsoft发布SQL Server 1.0的同时,也发布了DB-Library,它是一个单一的编程式或调用级的API,通过它的150个函数,MS-DOS或OS/2控制台应用程序,Windows或OS/2 GUI应用程序能够访问数据来进行创建,检索,更新和删除操作。

1.2   Embedded SQL for C

  一个预编译器,它允许SQL语句直接嵌入在源代码中,同时,这种方式也是LINQ的前身。

1.3   ODBC

  1992年9月,Microsoft发布了开放数据库接通性规范(Open Database Connectivity specification,也即ODBC)。ODBC现在还在广泛使用,它是一个包含50个函数的调用级API,这个API通过驱动程序与许多底层数据库或类似数据库的存储器进行通信。ODBC在专用API之上建立了一个数据访问抽象层,它让应用程序以单一的方式访问各类数据源(从最古老的到最前沿的技术)。数据库提供商也能提供一个本机(也即,非中间件)ODBC驱动程序来获取更高的性能(如Microsoft提供的SQL Server驱动程序)。

  当然,应用程序还是可以直接使用专用API;当应用程序需要操作来自不同提供商的数据库的数据库时,ODBC就提供了一种简单的访问方式----将应用程序与专用API分离了。

  与ODBC相关的是ODBC”驱动程序管理器”库,当应用程序访问DBMS时,驱动程序管理器的作用是使用包含在驱动程序中的特定于DBMS的细节来解释应用程序发出的数据查询。数据库驱动程序是插在应用程序与DBMS之间的一个中间层(middle layer)。通过这种方式,数据查询被转换成DBMS理解的命令。

  使用ODBC的基本条件是应用程序与DBMS必须是ODBC兼容的。换言之,应用程序必须能发出ODBC命令,DBMS必须能响应此命令。

  开发数据库驱动程序的人必须实现将驱动程序附加到驱动程序管理库。

1.4   Data Access Objects

  在面向对象技术兴起及Visual Basic 3发布的背景下,Microsoft于1992年11月创建了它的第一个面向对象的访问层---Data Acesss Objects。

1.5   Remote Data Objects

  1995年8月,Microsoft发布了Visual Basic 4,随之,用Remote Data Objects(创建在ODBC之上的VB兼容的对象层)取代了Data Access Objects。

1.6   OLE(Object Linking and Embedding) DB

  1996年8月,Microsoft发布了更通用(more generalized)的OLE DB技术,与ODBC相比,它创建了一个面向对象的访问层,以特定于数据存储的提供程序模式工作。

  OLE DB现在还在广泛使用,与ODBC相比,它没有提升数据访问的抽象级别,只是简单地提供了一个编程模型以适合某些开发风格。当时,它的发布促成了许多类型数据存储的诞生,特别是表列数据[tabular data](如电子表格,文本文件)。从某种程度讲,OLE DB是ODBC的发展。

1.7   ActiveX Data Object

  随着Internet的快速发展,人们认识到了web应用程序的重要性(与桌面客户应用程序相比)。然而,OLE DB是针对有指针的语言(如C,C++)开发的,这意味着像VBScript,JavaScript等脚本语言不能利用它。开发一种能让web应用程序访问各种数据存储的技术迫在眉睫。在此背景下,ActiveX Data Object于1996年10月诞生,它是建立上OLE DB之上的更高级别的对象抽象,可用于指针与非指针型语言。

 

截至1996年,有6 (DAO被RDO取代)种不同的Microsoft API用于数据访问:

1996年的选择

SQL Server DBs

DBs w/ ODBC driver

DBs w/ OLE DB driver

用C/C++写的应用程序

DB-Library, ESQL/C,
ODBC, OLE DB, ADO

ODBC

OLE DB, ADO

用VB写的应用程序

RDO

RDO

ADO

Web应用程序

ADO

 

ADO

至此,其中的一些技术继续存在以支持开发人员需要写的各类应用程序。一些技术得到了发展,另一些更老的技术因为新技术的出现而退出历史舞台。当SQL Server 2005(引入了新的,更好的,直接的API---SQL Server Native Client)出现时,终止了对DB-Library的支持。LINQ的开发终止了ESQL for C的长期运行。

对RDO的支持直至Visual Basic 6,之后,Visual Basic升级为Visual Basic.NET,从而关注的焦点转向ADO.NET。

 

截至2010年9月,用于非托管代码的数据访问技术:

当前选择

SQL Server DBs

DBs w/ ODBC driver

DBs w/ OLE DB driver

用C/C++写的应用程序

ODBC, OLE DB, ADO, SQL Native Client

ODBC

OLD DB, ADO

Web应用程序

ADO, PHP Driver,
JDBC Driver

用于 ODBC 的 OLE DB 提供程序 (MSDASQL)

ADO

 

2         .NET框架版本

版本

版本号

发布时间

Visual Studio

默认安装的Windows

备注

1.0

1.0.3705.0

2002-02-13

Visual Studio .NET

 

SP3

1.1

1.1.4322.573

2003-04-24

Visual Studio .NET 2003

Windows Server 2003

SP1

2.0

2.0.50727.42

2005-11-07

Visual Studio 2005

Windows Server 2003 R2

SP3

3.0

3.0.4506.30

2006-11-06

 

Windows Vista

Windows Server 2008

SP2

3.5

3.5.21022.8

2007-11-19

Visual Studio 2008

Windows 7

Windows Server 2008 R2

SP1

4.0

4.0.30319.1

2010-04-12

Visual Studio 2010

 

 

3         当今的数据开发之一:直接的数据访问

.NET框架(2002年2月发布1.0版,2003年4月发布1.1版)的横空出世改变了应用程序的开发方式,但是没有改变应用程序访问数据的基本要求。

数据访问的主要类包括SqlConnection,SqlCommand,DataReader,DataSet及DataTable,这些类一起组成了ADO.NET的核心。

与它的前身—ADO类似,ADO.NET通过一个抽象层(隐藏了底层存储技术的细节)来工作,这层就是ADO.NET数据提供程序。Microsoft为SQL Server提供了一个本机提供程序,也提供了用于OLEDB,ODBC

的提供程序。而且,ADO.NET支持对XML源的透明访问(ADO做不到)。

 

.NET 2002/2003中的ADO.NET

值得注意的是,ADO.NET的基本数据访问编程模式(即,查询)与之前的技术基本相同:

[a] 打开数据库连接;

[b] 在数据库中执行查询;

[c] 获取数据结果集;

[d] 处理结果;

[e] 释放结果;

[f] 关闭连接;

换言之,当API和其它细节变化时,代码的基本结构仍然保持不变。这不是坏事,因为这种编程模式完全符合数据库的的基本目的:提问题,然后获取答案。实事上,可以推断不管什么时候出现一种新的通用开发环境(类似DotNET框架),都会产生一种新的并且遵循这种模式的数据访问技术。同时,ADO.NET将继续是Microsoft数据访问的核心方式。

3.1    Language-Integrated Query (LINQ)

LINQ首次于2007年11月在.NET Framework 3.5中引入,它是ESQL for C的发展产物:将查询直接嵌入在编程语言本身的结构中。很显明,LINQ是一种比它的前身更高级的解决方案:

l        LINQ能在任何支持它的.NET语言(像C#,Visual Basic.NET)中使用它;

l        LINQ加入了很多现代的性能优化;

l        LINQ能对任意数据源进行操作(也即查询,更新);

       数据源可以是内存中的CLR对象,XML,数据库,ADO.NET数据集及其它实现了IEnumerable或Iqueryable的类。如下图:

 

2007年11月引入的LINQ(包含LINQ to Objects,LINQ to XML,LINQ to DataSet,LINQ to SQL)

   不仅有Microsoft提供的”LINQ to XYZ”实现,也有许多三方的实现,这些包括LINQ to Flickr,LINQ to Amazon,LINQ to CSV,LINQ to MAPI及LINQ to Twitter。简言之,如果某些东西看来起是可查询的数据,你就可以在其实现Iqueryable,然后使用LINQ来访问它。

   然而,我们要看到,在LINQ实现了简单,强大的查询机制(特别是对DataSet,SQL Server数据库的查询上)的同时,它并没有从本质上改变应用程序看待关系数据的方式。迄今为止,所有操作关系数据的技术(DB-Library,ESQL for C,ODBC,OLEDB,ADO,ADO.NET及LINQ)无一不是直接操作数据库表的关系结构。

   当数据库和应用程序都比较简单时,这种方式能很好地工作。然而,当数据库与应用程序都变得越来越复杂时,应用程序看待数据的方式(“概念”或”对象”模型)与数据库中数据的结构化方式(“存储”或”关系”模型)之间的矛盾也越来越突出。以一个制造商的订购系统为例,数据存储在多个关联的表中,然而,程序员只想使用一个单一的,概念性的”Order”实体,不想在订购相关的查询中使用复杂的”JOIN”。(这就是所谓的”对象关系阻抗失配”。)

   由于这个原因,程序员常常自己实现映射层以创建单一的概念实体。这样的一层提供了一个单一的”Order”对象,这个对象包含检索,更新等类似方法,这些方法在内部实现了必要的数据库级查询(使用Order对象与底层数据库表交换数据)。

   简言之,映射层简单地将应用程序与数据库的具体逻辑结构分开了,这在目前的项目中是很常见的模式。不过,这种层维护和实现起来都很繁琐。

3.2    ADO.NET Entity Framework

   .NET框架3.5SP1(包含实体框架)于2008年8月发布后,映射层难以实现与维护的状况有了改变,2010年4月.NET框架4.0发布后,对映射层又有了很大改进。正如实体框架的名字所暗示的那样,实体框架自动从现有数据库生成一个.NET映射层。另外,它还支持使用LINQ对最终实体进行查询(LINQ to Entities)。由于实体框架是建立在ADO.NET之上的,所以它直接利用ADO.NET提供程序。

   我们可以使用Visual Studio中的设计器来创建概念与关系。它会自动创建一个默认的映射。

   直到2010年9月,Microsoft最新的数据访问技术如下:

 

实体框架的第一个版本,它自动创建概念映射。编译时使用实体数据模型生成映射层类。

4         托管代码,非托管代码及本机代码是什么?

4.1   托管代码(managed code)

    托管代码是Visual Basic.NET,C#,F#或其它第三方针对.NET运行时的编译器创建的代码。托管代码编译成中间语言(IL),而不是可以直接运行在计算机上的机器代码。IL保存在一个称为程序集(assembly)的文件里,此文件包含元数据,它描述了代码中的类,方法及特性(如安全需求)。程序集是.NET世界中的一站式部署单元。你可以将它复制到另一台服务器来将其部署在那里,复制常常是部署唯一需要做的。

    托管代码运行在公共语言运行时中。运行时为运行中的代码提供许多服务。实际执行过程中,运行时首先加载并检查程序集以确保IL是正常的。然后,当调用方法时,运行时就将其编译成程序集所在机器能执行的机器码,并缓存这个机器码以供下次调用时使用(这就是所谓的即时编译)。

    程序集运行时,运行时将继续为其提供服务,如安全,内存管理,线程等。应用程序总是受运行时管理。

4.2   非托管代码(unmanaged code)

    非托管代码就是你在Visual Studio .NET 2002发布之前写的代码。Visual Basic 6,Visual C++ 6,可能还在你硬盘上的C编译器都产生非托管代码。非托管代码直接编译成机器码,可以运行在编译它的机器上,也可以运行在有相同或接近相同芯片的其它机器上。它不会从不可见的运行时那里获得诸如安全,内存管理等服务。它直接从操作系统获得这些服务。值得注意的是,它必须显式向操作系统发出服务请求,常常通过调用Windows SDK中的一个API来实现。距离当前较近的非托管应用程序可以通过调用COM来获得操作系统服务。

    与Visual Studio中的其它语言不同,Visual C++能创建非托管程序。这可能会造成一些混淆:你创建一个托管的C++应用程序时,生成的产品是一个扩展名为exe的IL程序集。你创建一个MFC应用程序时,生成的产品是一个Windows可执行文件(本机代码),扩展名也是exe。然而,这两个文件的内部布局完全不同。你可以使用中间语言反汇编程序(ildasm)来查看程序集及其元数据。当你打开非托管的exe文件时,会提示不能打开。

4.3   本机代码(native code)

术语"本机代码"有两种使用环境。许多人将其视为非托管代码的同义词;这个术语的另一种使用是用来描述JIT编译器的输出--运行在运行时中的机器代码。它被管理,但它不是IL,它是机器码。从这个意义上讲,不能简单假设"本机=非托管"。

掌握Microsoft Access中的数据访问技术 本文深入探讨了Microsoft Access中使用VBA进行数据操作的技术细节。内容涵盖了DAO和ADO对象的使用,介绍了不同版本的Access数据库引擎(Jet和ACE)以及它们的发展历程。我们还将学习如何处理数据库文件格式(.mdb和.accdb)之间的转换,以及如何设置和管理数据库的安全性。文章旨在帮助读者全面理解Access中数据访问的多种技术,提升数据操作的效率。 阅读详情

相关推荐

深入了解Microsoft Access中的数据访问技术

本博客文章深入探讨了Microsoft Access中的数据访问技术,包括DAO、ADO等对象库的介绍与使用,以及如何在VBA中引用和操作这些库。文章还详细说明了连接字符串的类型和创建引用ADO库的步骤,为数据库开发者提供实践指导。

weixin_30415591的博客 585

DAO(Data Access Object) 数据访问对象

DAO  编辑 DAO(Data Access Object) 数据访问对象是第一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。

Kodulf的专栏 7318

掌握Microsoft Access数据访问技术

本文深入探讨了Microsoft Access中的数据访问技术,涵盖DAO和ADO两种主要方法。通过实例代码和步骤详解,展示了如何通过DAO打开数据库、列出容器对象及文档名称,以及如何使用ADO以读/写模式打开Microsoft Jet数据库。同时,文章也讲解了如何处理数据库的只读访问模式和设置数据库密码,提供了丰富的代码示例和详细的执行过程。

weixin_28939623的博客 221

一个通用的数据库访问类(sql server数据库)

我在开发中小型WEB网站或者WEB应用程序通常使用三层架构。有一个比较好的通用的数据访问类往往能大大加快项目的进度,并且如果以后维护,二次开发将相当的方便。下面是一个通用的访问sql server数据库的访问类。它用到了微软企业开发库的组件Microsoft.Practices.EnterpriseLibrary.Data.dll。这个组件可以从网上下。下面是详细的代码。我已经加了注释。

Johnson的专栏 3592

精通Microsoft Access中的数据访问技术

本文深入探讨了Microsoft Access中数据访问技术的关键概念。首先介绍了VBA和Access内置对象库,解释了对象引用的优先级和如何在代码中指定库。接着,讲解了如何在Access数据库中引用其他库以增强VBA应用程序的功能。此外,本文还提供了关于如何管理和调试库引用的建议,并介绍了在不同版本的Access中如何注册和注销库文件。最后,概述了DAO、ADO以及ADOX和JRO对象库,以及它们在数据操作和定义中的应用。

weixin_42323064的博客 337

关于DAO(Data Access Object)的课件

DAO(Data Access Object),是有关于数据库的操作

数据访问组件SqlHelper

数据访问组件SqlHelper 数据访问组件是一组通用的访问数据库的代码,在所有项目中都可以用,一般不需要修改。本节使用的是Microsoft提供的数据访问助手,其封装很严密,且应用简单。 首先要先添加一个类,并命名为SqlHelper,系统会提示是否将类放在App_Code文件夹中。此时一定要选择“是”,因为放在此文件夹下,系统会自动进行编译,程序员就可以直接使用,无需另外编译了。 Sql...

weixin_34321977的博客 249

Data Access Objects 1.9.1

iBATIS.NET - Data Access Objects Application Framework Version 1.9.1

DAO(Data Access Object)数据访问对象

数据访问对象模式 数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。 以下是数据访问对象模式的参与者。 1、数据访问对象接口(Data Access Object Interface)——该接口定义了在一个模型对象上要执行的标准操作。 2、数据访问对象实体类(Data Access Obj...

weixin_44165923的博客 650

MuJoCo 动捕接口 Mocap 直接操控机械臂(附代码)

动作捕捉(Motion Capture,简称 Mocap)是一种记录并处理人或物体动作的技术,在影视、游戏、机器人等领域应用广泛。通过上下左右以及alt_l,alt_r可以控制hand这个hody跟着mocap进行同步,这里将quat固定为Z朝下。首先在 scene.xml 中修改添加 mocap 和 equality。下面介绍如何配置 Mocap 以及使用按键进行末端控制。控制核心代码,通过按键控制mocap的pos和quat。

darcsdn 879

微波无源器件 功分器1 新型方波导双模无功功分器

本名证明了一种基于有着特定功能的(dedicated)T性匹配元件(散射件)的进化结点的新型波导双模两路功分器的可行性。这个散射件,有着面向三个部分的匹配部分,提供了等效功分并且朝着对应的输出端口传输矩形波导的两个TE10/TE01正交模式。所提出的设计紧凑,易于比例变化并且能够级联来获得。

qq_45245770的博客 1393

DAO-数据访问对象(Data Access Object) 模式

业务对象只应该关注业务逻辑,不应该关心数据存取的细节。数据访问对象必须实现特定的持久化策略(如,基于JDBC或Hibernate的持久化逻辑), 这样就抽出来了DAO层,作为数据源层,而之上的Domain Model层与之通讯而已,如果将那些实现了数据访问操作的所有细节都放入高层Domain model(领域模型)的话,系统的结构一定层次上来说就变得有些混乱。低级别的数据访问逻辑与高级别的业务逻辑

classicbear的专栏 6743

微信小程序scroll-view,点击menu,滚动到锚点;滚动到锚点,激活menu。

首先看看效果图1、首先是点击菜单,滚动列表,这个实现比较简单。直接使用scroll-view 的 scroll-into-view属性,小程序文档。<view class='container'> <!-- 菜单 --> <view class='menu'> <ul> <!-- scrollList 修改cate --&g...

weixin_39834214的博客 1万+

Microsoft所提供的数据访问技术

此文介绍Microsoft提供的所有数据访问技术,以便能够对这些技术有一个全面的了解,从而选择出适合自己的方式来连接到SQL Server 2005。自然,如果希望能够使用SQL Server 2005的所有新增功能并且获得强劲的性能,则还是应当使用ADO.NET 2.0。  Microsoft所提供的数据访问技术包括DB-Library、ESQL、DAO、Microsoft数据访问组件(即M

Greenfoliage的专栏 1371

星宸科技SSD20x/SSD21X应用层DEMO实战指南:从入门到深度定制

本文详细介绍了星宸科技SSD20x/SSD21X系列芯片的应用层DEMO开发实战,从基础环境搭建到深度定制开发。内容涵盖DEMO资源获取、核心功能实现、第三方库集成以及性能优化技巧,帮助开发者快速掌握智能显示和多媒体处理应用的开发方法。特别适合嵌入式开发者在智能家居、工业控制等场景中应用。

weixin_42524226的博客 268

SpringCloud Alibaba - Seata 实现高可用和异地容灾

这里不仅仅要实现高可用,还需要实现异地容灾. 异地容灾就是说,如果你整了好几个节点部署起来,全部放到一个机房里面,那么如果这个机房出了故障,就意味着整个集群就完了,所以对于一个大型的集群来讲,都会把这些服务异地部署.问题2:如果我们要实现异地容灾,也就说某一个机房挂了,需要快速的切换到另一个可用的机房,但是这个配置在配置文件中写死了,如果要改配置文件,还需要重启服务器,这是我们不希望看到的,怎么办?进入 seata/bin 目录,运行 seata-server.bat 文件,默认端口为 8091。

CYK_byte的博客 976

微软的数据访问技术(From MDAC to Windows DAC)

      在过去的很多年中,微软发展了很多种具体的数据访问技术。然而,随着技术的发展和进步,很多技术现在都显得很过时了;有些技术因为被非常广泛的使用,仍然得到了一定程度的维护和支持。10多年前被视为主流的技术,到今天不是被彻底抛弃就是被视为Legacy了。这里是微软的:Data Access Technologies Road Map。它的维护历史为:January 2002;Revised D

The Magic Thing Happens 2万+

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

前程算法屋的博客 1025

Microsoft 数据访问技术简介

在介绍SQL Native Client编程之前,首先来了解一下Microsoft提供的所有数据访问技术,以便读者能够对这些技术有一个全面的了解,从而选择出适合自己的方式来连接到SQL Server 2005。自然,如果希望能够使用SQL Server 2005的所有新增功能并且获得强劲的性能,则还是应当使用ADO.NET 2.0。   Microsoft所提供的数据访问技术包括DB-Libra

hfit000的专栏 1111

Linux 下安装 openjdk 17【详细步骤】

JDK17,安装教程。

甘蓝的专栏 7507

YOLO26 从零到工业落地全实战:自定义训练+多场景测试+边缘部署预备,踩坑实测100%可复现

很多人觉得训练是核心,其实不是——数据集的质量,直接决定了你模型的上限。我见过太多人,标注不规范、格式错误、数据集划分混乱,然后疯狂调参,训了几百轮还是不收敛,纯属白费功夫。我这次用的是工业零件缺陷检测自定义数据集,共3个类别:划痕、毛刺、变形,总计1200张图片,给大家讲一套标准的、可复现的数据集制作流程,不管你是做工业检测、安防、交通,都能直接套用。很多人拿到数据集,直接用默认命令训练,然后抱怨精度上不去。默认参数是给COCO数据集用的,你的自定义数据集,必须针对性调参,不然根本达不到最优效果。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 573

抢鲜阅读新书文章:Microsoft 数据访问技术简介

 在介绍SQL Native Client编程之前,首先来了解一下Microsoft提供的所有数据访问技术,以便读者能够对这些技术有一个全面的了解,从而选择出适合自己的方式来连接到SQL Server 2005。自然,如果希望能够使用SQL Server 2005的所有新增功能并且获得强劲的性能,则还是应当使用ADO.NET 2.0。Microsoft所提供的数据访问技术包括DB-Libr

张洪举 2596

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: IT学习力
下一篇: C# Windows Service与Timer(计时器)
Jason_Steven
博客等级 码龄20年 14粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值