《VB访问SQLServer数据库技术全揭密精品资料.doc》由会员分享,可在线阅读,更多相关《VB访问SQLServer数据库技术全揭密精品资料.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VB访问SQLServer数据库技术全揭密摘 要: 本文讨论了Visual Basic应用程序访问SQL Server数据库的几种常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法性能和优缺点。 一、引言 SQL Server是微软推出的中小型网络数据库系统,是目前最常用的数据库系统之一。随着SQL Server网络数据库应用程序日益增多,这种Web数据库应用系统的正常运行一般依赖于已存在的用户数据库。创建维护数据库的工作可用SQL Server提供的SQL Enterprise Manager工具来进行,如能提供一种定制的数据库管理工具,通过管理应用
2、程序来管理数据库及其设备,对用户来说无疑是最理想的。 Visual Basic作为一种面向对象的可视化编程工具,具有简单易学,灵活方便和易于扩充的特点。而且Microsoft为其提供了与SQL Server通信的API函数集及工具集,因此它越来越多地用作大型公司数据和客户机服务器应用程序的前端,与后端的Microsoft SQL Server相结合,VB能够提供一个高性能的客户机服务器方案。 二、VB访问SQL Server数据的常用方法 使用Visual Basic作为前端开发语言,与SQL Server接口有几种常用的方法,即: 数据访问对象/Jet 为ODBC API编程 使用SQL S
3、erver的Visual Basic库(VBSQL)为DB库的API编程 RDO 远程数据对象(RemoteData Objects) ADO 数据对象(Active Data Objects) 1、数据访问对象/Jet VB支持Data Access Objects(DAOs)的子集。DAO的方法虽然不是性能最好的管理客户机服务器之间的对话方式,但它的确有许多优点。DAO/Jet是为了实现从VB访问Access数据库而开发的程序接口对象。使用DAOs访问SQL Server的过程如下:应用程序准备好语句并送至Jet,Jet引擎(MASJT200.DLL)优化查询,载入驱动程序管理器并与之通讯
4、,驱动程序管理器(ODBC.DLL)通过调用驱动器(SQLSRVR.DLL)的函数,实现连接到数据源,翻译并向SQL Server提交SQL语句且返回结果。下面是一个用DAOs访问SQL Server的VB实例。 注释:Form Declarations Dim mydb As Database Dim mydynaset As Dynaset Private Sub Form_Load() Set mydb = OpenDatabase(, False, False, ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales) Set mydynaset
5、= mydb CreateDynaset(Select*from Customers) End Sub 上述例子是以非独占、非只读方式打开sales数据库,并检索Customers表中的所有字段。OpenDatabase函数的最后一个参数是ODBC连接字符串参数,它指明了Microsoft Access连接到SQL Server所需要知道的一些内容。其中“DSN”为数据源名,“WSID”为工作站名,“DATABASE”为所要访问的数据库名。 2、利用ODBC API编程 ODBC(Open Database Connectivity)的思想是访问异种数据库的一种可移植的方式。与数据资源对话的公
6、用函数组装在一个称为驱动程序管理器(ODBC.DLL)的动态连接中。应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱动器(SQLSRVR.DLL)把它们送到服务器中。 下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工作设置了语句句柄。 Global giHEnv As Long Global giHDB As Long Global giHStmt As Long Dim myResult As integer Dim myConnection As Srting Dim myBuff As String*256 Dim myBufflen As Integer
7、 If SQLAllocEnv(giHEnv)SQL_SUCCESS Then MsgBoxAllocation couldn注释:t happen! End If If SQLAllocConnect(giHEnv,giHDB)SQL_SUCCESS Then MsgBox SQL Server couldn注释:t connect! End If myConnection=DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales myResult=SQLDriverConnect(giHDB,Test,form1.hWnd
8、,myConnection.len(myConnection), myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D) myResult=SQLAllocStmt(giHDS,giHStmt) myResult=SQLFreeStmt(giHStmt,SQL_COLSE) rsSQL=Select * from Customers Where City = Hunan myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL) 3、使用VBSQL对DB库API编程 DB库是SQL Server的本地API
9、,SQL Server的Visual Basic库(VBSQL)为Visual Basic程序员提供API。从一定意义上说,VBSQL是连接Visual Basic程序到SQL Server的性能最好最直接的方式。VBSQL包含以下三个文件: VBSQL.VBX: 包含库函数,具有访问重要的消息和处理错误的能力 VBSQL.BI:包括所有的常量和变量说明 VBSQL.HLP:Windows帮助文件,使用VBSQL的指南 使用VBSQL时,必须将VBSQL.BI加入到Visual Basic工程文件中,并确保VB程序运行时有VBSQL.VBX文件。 一般的DB库API编程的过程是这样的:先通过调
10、用SqlInit对DB库进行初始化,再调用SqlConnection打开一个连接,然后就可做一些工作。下面的代码是一个初始化DB库并登录到服务器的通用例程。 Private Sub InitializeApplication() DBLIB_VERSION=SqlInit() If DBLIB_VERSION=Then MsgBoxCould not initialize DBLIB!Exit application., MB_ICONEXCLAMATION End If End Sub Private Function LoginToServer() As integer loginToSe
11、rver=SUCCEED Status%=SqlSetloginTime%(loginTimeOut) If giSqlConn0 Then SqlClose(giSqlConn) 注释:关闭已打开的连接 giSqlConn=SqlOpenConnection(gsServerName, gsLoginID, gsPassword, ProgramName, ProgramName) If giSqlConn0 Then liresuit=SqlUse(giSqlConn,Sales) Else LogintoServer=FAIL End If End Function 4、RDO 远程数据
12、对象(RemoteData Objects) 要讨论RDO,就必然要谈到DAO。RDO是从DAO派生出来的,但两者很大的不同在于其数据库模式。DAO是针对记录(Records)和字段( Fields),而RDO是作为行(Rows)和列(Columns)来处理。也就是说DAO 是ISAM模式,RDO是关系模式。此外DAO是访问Access的Jet引擎(Jet是ISAM)的接口,而RDO则是访问ODBC的接口。 可见,RDO是综合了DAO/Jet、VBSQL/DBLib以及ODBC的优点的对象(Object)。需要强调的是,RDO是包裹着ODBC API的一层薄薄的外壳, 被设计成在后台(服务器端
13、)有数据库存在的前提下运行,同时也是针对SQL Server和Oracle而特别设计的。 RDO的优势在于它完全被集成在VB之中。此外,直接访问SQL Server存储过程、完全支持T-SQL、T-SQL调试集成在开发环境中、Visual Database Tools的集成化等,也是RDO的长处。 在RDO的对象和集合中,有很多对数据库的状态和设定进行操作的属性(Property),以及对数据库进行操作的方法(Method)。利用这些,从RDO2.0起就可以开发事件驱动的数据库应用程序。 RDO对象与VB中其他对象的概念相同。与VB用的ActiveX控件(以往称为Custom Control或
14、OCX、VBX)相似的是,RDO也带有属性和方法;但同Spread、InputMan等普遍应用的ActiveX控件不同的是,RDO没有自己的用户界面,因而可以和VB标准的Timer控件归为同一类。当然也可以将RDO看作调用ODBC API函数,进而对后台数据库操作加以控制的对象。在RDO的属性和方法中,包含了对单个的ODBC API函数以及一连串API函数的调用。 rdoEngine对象 最初调用RDO对象以及RDC(远程数据控件)时,自动生成rdoEngine对象的附带事件(incident)。rdoEngine用于对RDO全局属性的参数、选项进行设置,是在RDO的阶层结构内处于最上层的对象
15、,包含了所有的其他对象。 rdoEngine对象与DAO/Jet不同,虽然被多个应用程序共享,但体现rdoEngine对象的设定值的属性却并不共用,而是在各自的应用程序的程序界面中对其分别加以设定。这些设定值对其他使用RDO以及RDC的应用程序没有任何影响。rdoEngine不是集合的要素,而是重新定义的对象,rdoEngine对象不能被追加作成对象属性的初值。 rdoEnvironment对象 RDO对象在自动创建rdoEngine对象时,将rdoEnviroment对象的初始值生成并保存为rdoEnviroments(0)。一般情况下,应用程序中不必追加rdoEnvironment对象,大
16、多只需对已有的rdoEnviroments(0)进行操作就可以了。只有在支持一个以上事务(Transaction),需要将用户名和口令信息分别处理的情况下,利用rdoCreateEnvironment方法将特定的用户名和口令值做成新的rdoEnvironment对象。在这个方法中可以指定固有名、用户名和口令,如果所指定的值与rdoEnvironments集合的已经存在的成员名称相同,会产生错误。新建的rdoEnvironment对象自动追加在rdoEnvironments集合的最后。调rdoCreateEnvironment方法时,其name参数可以是长度为0的文字列,这时新的rdoEnvir
17、onment对象将不会被追加在rdoEnvironments集合之中。 rdoConnection对象 rdoConnection对象用于同SQL Server的连接管理。 下面是与SQL Server连接的例子。 用OpenConnection方法的一个实例。 设定的DSN为MyDSN: Dim Cn As rdoConnection Dim En As rdoEnvironment Dim Conn As String Conn = DSN = MyDSN; UID = Jacob; & PWD = 123456; DATA BASE = MyDb; Set Cn= En.OpenConn
18、ection(, rdDriverPrompt, False, Co nn) Set Cn= En.OpenConnection(Prompt:= rdDriverPrompt, Rea dOnly:= False,Connect:= Cnn) 用EstablishConnection方法的一个实例。 这里以独立的rdoConnection对象为例说明与SQL Server的连接。 Public WithEvents Eng As rdoEngine Public WithEvents Cn As rdoConnection Private Sub Form_Load() Set Eng =
19、New rdoEngine Set Cn = New rdoConnection With Cn .Connect = UID = ; PWD = ; & DATABASE = pubs; DSN = biblio .LoginTimeout = 5 .EstablishConnection rdoDriverNoPromt, True, rdAsyncEna ble End With End Sub 在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行初始化。这里有一点需要注意,rdoConnection对象是处于独立的状态之下,即使是处于未连接状态也
20、可以设置属性的值。接下来是rdoConnect对象的事件处理程序。从RDO 2.0起可以实现异步方式(rdAsyn cEnable),EstablishConnection就设定为该值。在异步状态下,不必等待与数据库的连接,程序可以迅速从Form_Load 函数中退出。 然后是BeforeConnect事件,该处理在与数据库的连接开始以前被激发,此时不能进行有关终止连接的操作: Private Sub Cn_BeforeConnect(ConnetString As String, Pro mpt As Variant) MsgBox 正在连接 & ConnectString, vbOKOnl
21、y, 连接前 End Sub 连接完成之后的事件处理: Private Sub Cn_Connect(ByVal ErrorOccurred As Boolean) Dim M As String If ErrorOccurred Then For Each er In rdoErrors M = M & er & vbCrLf & M Next MsgBox 连接失败 & vbCrLf & M Else MsgBox 连接成功 注释:这是确认连接状态的测试代码 Cn.Excute use pubs End Sub RDO连接处理结束后,在该事件中确认连接成功与否。连接成功的情况下ErrorO
22、ccurred返回False,失败时为True,由此可以对rdoErrors集合进行检测: Private Sub Eng_InfoMessage() For Each er In rdoErrors Debug.Print er Next RdoErrors.Clear End Sub 不能与SQL Server连接的原因多种多样,有可能是由于对数据库的访问权限、网络连接问题、数据库表的信息错误、SQL Server同时连接的许可数、资源不足等等,具体情况需要与网络管理员商量。 断开连接的操作非常简单,但又很重要,因为RDO不提供自动断开的功能。 Cn.Close Set Cn = Noth
23、ing 注释:释放对象所占的内存资源 En.Close Set En = Nothing 注释:释放对象所占的内存资源 VB是对象语言,Form、ActiveX控件也都是对象。使用对象后必须养成将对象设为Nothing把它从内存中释放的编程习惯。这样可以预防很多不可预测错误,往往程序中发生原因不明的错误时,其原因就在于此。 5、ADO 数据对象(Active Data Objects) ADO是基于全新的OLE DB技术,OLE DB可对电子邮件、文本文件、复合文件、数据表等各种各样的数据通过统一的接口进行存取。随着ActiveX控件的升级(Windows 98的ActiveX 5.0),RD
24、O将被以ActiveX技术为基础的ADO接口所替代。下面将介绍基于ActiveX技术的ADO访问SQL Server 6.5数据库的技术和方法。基于浏览器的ADO接口常用函数如下: (1)取当前的工作数据库 由于管理任务一般都必须在Master库中完成,因此在执行管理任务之前,最好保存当前工作库,以便完成任务之后再切换回原来的任务。 Public Function SQLGetCurrentDatabaseName(Cn As ADODB.Connection) As String Dim sSQL As String Dim RS As New ADODB.Recordset On Erro
25、r GoTo errSQLGetCurrentDatabaseName sSQL=select CurrentDB=DB_NAME ( ) RS.Open sSQL, Cn SQLGetCurrentDatabaseName=Trim $ (RS! CurrentDB) RS.Close Exit Function errSQLGetCurrentDatabaseName: SQLGetCurrentDatabaseName= End Function (2)取SQL Server安装目录下的DATA子目录路径 取SQL Server的设备文件缺省目录,返回如D:MSSQL DATA。 Pub
26、lic Function SQLGetDataPath(Cn As ADODB.Connection) As String Dim sSQL As String Dim RS As New ADODB.Recordset Dim sFullPath As String On Error GoTo errSQLGetDataPath sSQL=select phyname from mastersysdevices where name=注释:master注释: RS.Open sSQL, Cn sFullPath = RS! phyname RS.Close SQLGetDataPath=Le
27、ft $ (sFullPath, Len(sFullPath) -10) 注释:MASTER.DAT的大小 Exit Function errSQLGetDataPath: SQLGetDataPath= End Function (3)创建一个新数据库 Public Function SQLCreateDatabase65 (Cn As ADODB.Connection,sDBName As String, sDataDeviceName As String, nDataSize As Integer, Optional sLogDeviceName, Optional nLogSize)
28、As Boolean Dim sSQL As String On Error GoTo errSQLCreateDatabase65 Dim sDB As String sDB =SQLGetCurrentDatabaseName(Cn) sSQL = USE master Cn.Execute sSQL sSQL =CREATE DATABASE & sDBName sSQL = sSQL & ON & sDataDeviceName & = & nDataSize If Not IsMissing(sLogDeviceName) And Not IsMissing(nLogSize) Th
29、en sSQL = sSQL & LOG ON & sLogDeviceName & =& nLogSize End If Cn.Execute sSQL sSQL = USE & sDB Cn.Execute sSQL SQLCreateDatabase65 = True Exit Function errSQLCreateDatabase65: On Error Resume Next sSQL = USE & sDB Cn.Execute sSQL SQLCreateDatabase65 = False End Function (4)判断一个数据库是否存在 Public Functio
30、n SQLExistDatabase(Cn As ADODB.Connection, sDBName As String) As Boolean Dim sSQL As String Dim RS As New ADODB.Recordset Dim bTmp As Boolean on Error GoTo errSQLExistDatabase sSQL = select CntDB = count ( * ) sSQL = sSQL & From master.dbo.sysdatabases sSQL = sSQL & Where name = 注释: & sDBName & 注释:
31、RS.Open sSQL, Cn If RS! CntDB = 0 Then bTmp = False Else bTmp = True RS.Close SQLExistDatabase = bTmp Exit Function errSQLExistDatabase: SQLExistDatabase = False Exit Function End Function (5)删除一个数据库 Public Function SQLDropDatabase (Cn As ADODB.Connection, sDBName As String) As Boolean Dim sSQL As S
32、tring On Error GoTo errSQLDropDatabase If Not SQLExistDatabase(Cn, sDBName) Then SQLDropDatabase = True Exit Function End If Dim sDB As String sDB = SQLGetCurrentDatabaseName(Cn) sSQL = Use master Cn.Execute sSQL sSQL = DROP DATABASE & sDBName Cn.Execute sSQL sSQL = USE & sDB Cn.Execute sSQL SQLDrop
33、Database = True Exit Function errSQLDropDatabase: On Error Resume Next sSQL = USE & sDB Cn.Execute sSQL SQLDropDatabase = False End Function 三、性能比较及应用说明 用VB开发基于SQL Server的数据库系统,以上几种访问SQL Server的方法各有各的特点。DAOs方法是基于对象的,因而便于使用,但是它是从Visual Basic到SQL Server最慢的连接方式。ODBC API和VBSQL方法从本质上讲是基于程序的。ODBC API方法通用性
34、好,允许最强的互操作性,编程简单,但速度慢于VBSQL方法。VBSQL方法通过VBSQL控件,提供了重要的SQL Server前端应用程序所需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误处理能力,完全支持异步处理、游标和计算列等。这些都是VBSQL方法超出其它方法的优势,但其编程稍复杂。RDO是位于ODBC API之上的一个对象模型层,它依赖ODBC API、ODBC驱动程序以及后端数据库引擎来实现,用RDO所需的程序短小(约250 KB)、快速。RDO具备基本的ODBC处理方法,可直接执行大多数ODBC API函数,RDO包含在VB 4.0/VB 5.0企业版中,由MSRDO32
35、.DLL动态连接库来实现。RDO是综合了DAO/Jet、VBSQL/DBLib和ODBC的优点的对象模型,包含ODBC API应用层,设计为在后台(服务器端)有数据库存在的前提下运行,是针对SQL Server和Oracle而特别设计的。RDO的优势在于它完全被集成在VB之中,可直接访问SQL Server存储过程、完全支持T-SQL、T-SQL调试集成在开发环境中、Visual Database Tools的集成化等。但微软已宣布今后不再对VBSQL/DBLib进行升级,而ODBC API函数一般的编程方式也不为人们所喜爱,RDO的应用将逐渐减少。至于实际使用哪一种接口方式,在很大程度上依赖
36、于用户的应用程序的具体情况而定。 四、VisualBasic访问数据库的前景 近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样,Visual Basic访问数据库的解决方案面临诸如快速提取分布于企业内部和外部有用商业信息等的多种挑战。为此Microsoft提出一种新的数据库访问策略,即“统一数据访问”(UniversalDataAccess)的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源,提供独立于开发工具和开发语言的简单的编程接口,这些技术使得企业集成多种数据源、选择更好的开发工具、应用软件、操作平台、建立容易维护的解决方案成为可能。 “统一数据访
37、问”的基础是Microsoft的数据访问组件。这些组件包括ActiveXDataObjects(ADO)、RemoteDataService(RDS,也称“高级数据连接器或”ADC)、OLEDB和ODBC。附录资料:不需要的可以自行删除bat文件的基本应用bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell
38、, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。 = 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 = 注 = 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越
39、边缘化。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 = 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 = 注 = 批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语
40、言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。 = 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:batch,你就可以在任意位置运行所有你编写的批处理程序。 = 注 = 纯以dos系统而
41、言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻内存),以com为扩展名的可执行程序(由 直接载入内存),以exe位扩展名的可执行程序(由 重定位后载入内存),以bat位扩展名的批处理程序(由 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存) = 第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令
42、放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例: ECHO OFF PATH C:WINDOWS;C:WINDOWSCOMMAND;C:UCDOS;C:DOSTools; C:SYSTOOLS;C:WINTOOLS;C:BATCH LH SMARTDRV.EXE /X LH DOSKEY.COM /insert LH CTMOUSE.EXE SET TEMP=D:TEMP SET TMP=D:TEMP = 注 = AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM
43、启动时解释执行; 而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。 = willsort 编注 = 以下关于命令的分类,有很多值得推敲的地方。常用命令中的本不是命令,而dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为批处理命
44、令。 以下摘录MS-DOS 6.22 帮助文档中关于批处理命令的文字,当然,其中有些概念和定义已经有些落后了。 批处理命令 批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。 任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。 = 常用命令 echo、call、pause、rem(小技巧:用:代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 = 注 = 首先, 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符