在商业应用程序中最重要的组件是数据
无论是在线的商务应用程序
公司的企业软件还是小型公司的会计应用程序无不如此
通过一个通用的线程与数据打交道
即都必须实现快速
有效
可靠的方式存储
检索和处理数据
然而一直一来令人棘手的问题是这些数据文件常以不同的格式存储这就需要开发者学会用多种不同的方式来处理完全一样的事情Microsoft等诸多数据提供者力求实现数据访问格式的标准化
从Odbc的出现到DaoRdoOledbAdo的实现可以说标准化的进程逐步实现特别是Ado的出现很好的实现了通用数据访问的模式致使很多人认为每隔两年学习一种新的数据访问对象模型的年代已经过去了但是通过Internet我们发现这种想法是错误的
一ADONET的设计目标
随着应用程序开发的发展演变新的应用程序已基于Web应用程序模型越来越松散地耦合如今越来越多的应用程序使用XML来编码要通过网络连接传递的数据Web应用程序将HTTP用作在层间进行通信的结构因此它们必须显式处理请求之间的状态维护这一新模型大大不同于连接紧耦合的编程风格此风格曾是客户端/服务器时代的标志在此编程风格中连接会在程序的整个生存期中保持打开而不需要对状态进行特殊处理
设计ADONET的目的是为了满足这一新编程模型的以下要求具有断开式数据结构能够与XML紧密集成具有能够组合来自多个不同数据源的数据的通用数据表示形式在创建ADONET时Microsoft具有以下设计目标
利用当前的ADO知识
ADONET的设计满足了当今应用程序开发模型的多种要求同时该编程模型尽可能地与ADO保持一致这使当今的ADO开发人员不必从头开始学习全新的数据访问技术
ADONET是NET Framework的固有部分因此对于ADO程序员决不是完全陌生的
ADONET与ADO共存虽然大多数基于NET的新应用程序将使用ADONET来编写但NET程序员仍然可以通过NET COM互操作性服务来使用ADO
支持N层编程模式
ADONET为断开式n层编程环境提供了一流的支持许多新的应用程序都是为该环境编写的使用断开式数据集这一概念已成为编程模型中的焦点n层编程的ADONET解决方案就是DataSet
集成XML支持
XML和数据访问是紧密联系在一起的即XML的全部内容都是有关数据编码的而数据访问越来越多的内容都与XML有关NET Framework不仅支持Web标准它还是完全基于Web标准生成的
XML支持内置在ADONET中非常基本的级别上NET Framework和ADONET中的XML类是同一结构的一部分它们在许多不同的级别集成您不必在数据访问服务集和它们的XML相应服务之间进行选择它们的设计本来就具有从其中一个跨越到另一个的功能
二ADONET的组件
设计ADONET组件的目的是为了从数据操作中分解出数据访问ADONET的两个核心组件会完成此任务DataSet和NET Framework数据提供程序后者是一组包括ConnectionCommandDataReader和DataAdapter对象在内的组件
ADONET DataSet是ADONET的断开式结构的核心组件DataSet的设计目的很明确为了实现独立于任何数据源的数据访问因此它可以用于多种不同的数据源用于XML数据或用于管理应用程序本地的数据DataSet包含一个或多个DataTable对象的集合这些对象由数据行和数据列以及主键外键约束和有关DataTable对象中数据的关系信息组成
ADONET结构的另一个核心元素是NET Framework数据提供程序其组件的设计目的相当明确为了实现数据操作和对数据的快速只进只读访问Connection对象提供与数据源的连接Command对象使您能够访问用于返回数据修改数据运行存储过程以及发送或检索参数信息的数据库命令DataReader从数据源中提供高性能的数据流最后DataAdapter提供连接DataSet对象和数据源的桥梁DataAdapter使用Command对象在数据源中执行SQL命令以便将数据加载到DataSet中并使对DataSet中数据的更改与数据源保持一致
可以为任何数据源编写NET Framework数据提供程序NET Framework提供了四个NET Framework数据提供程序SQL Server NET Framework 数据提供程序OLE DB NET Framework数据提供程序ODBC NET Framework 数据提供程序和 Oracle NET Framework 数据提供程序
三使用ADONET连接到数据源
在ADONET中可以使用Connection对象来连接到指定的数据源若要连接到Microsoft SQL Server 版或更高版本请使用SQL Server NET Framework数据提供程序的SqlConnection对象若要使用用于SQL Server的OLE DB提供程序(SQLOLEDB)连接到OLE DB数据源或者连接到Microsoft SQL Server x版或较早版本请使用OLE DB NET Framework数据提供程序的OleDbConnection对象若要连接到ODBC数据源请使用ODBC NET Framework数据提供程序的OdbcConnection对象若要连接到Oracle数据源请使用Oracle NET Framework数据提供程序的OracleConnection对象
使用ADONET连接到SQL Server
SQL Server NET Framework数据提供程序使用SqlConnection对象提供与Microsoft SQL Server 版或更高版本的连接
SQL Server NET Framework数据提供程序支持类似于OLE DB (ADO)连接字符串格式的连接字符串格式有关有效的字符串格式名称和值请参见附表
以下代码示例演示如何创建和打开与SQL Server(版本 或更高版本)数据库的连接
[Visual Basic] Dim myConn As SqlConnection = New SqlConnection(Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind) myConnOpen() [C#] SqlConnection nwindConn = new SqlConnection(Data Source=localhost; Integrated Security=SSPI; + Initial Catalog=northwind) nwindConnOpen()
建议使用完Connection后始终将其关闭这可以使用Connection对象的Close或Dispose方法来实现
集成安全性和ASPNET
SQL Server集成安全性(也称为受信任的连接)是连接到SQL Server的最安全的方法因为它不在连接字符串中公开用户标识和密码建议使用该方法对连接进行身份验证
集成安全性使用正在执行的进程的当前安全标识或标记对于桌面应用程序安全标识或标记通常是当前登录的用户的标识
ASPNET应用程序的安全标识可设置为几个不同的选项之一若要更好地了解使用集成安全性连接到SQL Server时ASPNET应用程序所使用的安全标识请参见我写得中进行安全的ADONET编码系列或者参考msdn
Name
Default
Description
名称
默认值
说明
Application Name
The name of the application or Net SqlClient Data Provider if no application name is provided
应用程序名称
应用程序的名称或者Net SqlClient Data Provider(如果不提供应用程序名称)
AttachDBFilename
or
extended properties
or
Initial File Name
The name of the primary file including the full path name of an attachable database
The database name must be specified with the keyword database
AttachDBFilename
或
扩展属性
或
初始文件名
可连接数据库的主文件的名称包括完整的路径名
必须使用关键字database来指定数据库的名称
Connect Timeout
or
Connection Timeout
The length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error
连接超时设定
或
连接超时
在终止尝试并产生错误之前等待与服务器的连接的时间长度(以秒为单位)
Current Language
The SQL Server Language record name
当前语言
SQL Server 语言记录名称
Data Source
or
Server
or
Address
or
Addr
or
Network Address
The name or network address of the instance of SQL Server to which to connect
数据源
或
服务器
或
地址
或
Addr
或
网络地址
要连接的 SQL Server 实例的名称或网络地址
Encrypt
false
When true SQL Server uses SSL encryption for all data sent between the client and server if the server has a certificate installed Recognized values are true false yes and no
加密
false
当该值为 true 时如果服务器端安装了证书则 SQL Server 将对所有在客户端和服务器之间传送的数据使用 SSL 加密可识别的值为 truefalseyes 和 no
Initial Catalog
or
Database
The name of the database
初始目录
或
数据库
数据库的名称
Integrated Security
or
Trusted_Connection
false
When false User ID and Password are specified in the connection When true the current Windows account credentials are used for authentication
Recognized values are true false yes no and sspi (strongly recommended) which is equivalent to true
集成安全性
或
Trusted_Connection
false
当为 false 时将在连接中指定用户 ID 和密码当为 true 时将使用当前的Windows 帐户凭据进行身份验证
可识别的值为 truefalseyesno 以及与 true 等效的 sspi(强烈推荐)
Network Library
or
Net
dbmssocn
The network library used to establish a connection to an instance of SQL Server Supported values include dbnmpntw (Named Pipes) dbmsrpcn (Multiprotocol) dbmsadsn (Apple Talk) dbmsgnet (VIA) dbmslpcn (Shared Memory) and dbmsspxn (IPX/SPX) and dbmssocn (TCP/IP)
The corresponding network DLL must be installed on the system to which you connect If you do not specify a network and you use a local server (for example or (local)) shared memory is used
网络库
或
网络
dbmssocn
用于建立与 SQL Server 实例的连接的网络库支持的值包括 dbnmpntw(命名管道)dbmsrpcn(多协议)dbmsadsn (Apple Talk)dbmsgnet (VIA)dbmslpcn(共享内存)及 dbmsspxn (IPX/SPX) 和 dbmssocn (TCP/IP)
相应的网络 DLL 必须安装在要连接的系统上如果不指定网络而使用一个本地服务器(比如或(local))则使用共享内存
Packet Size
Size in bytes of the network packets used to communicate with an instance of SQL Server
数据包大小
用来与 SQL Server 的实例进行通讯的网络数据包的大小以字节为单位
Password
or
Pwd
The password for the SQL Server account logging on (Not recommended To maintain a high level of security it is strongly recommended that you use the Integrated Security or Trusted_Connection keyword instead)
密码
或
Pwd
SQL Server 帐户登录的密码(建议不要使用为了维护最高级别的安全性强烈建议改用 Integrated Security 或 Trusted_Connection 关键字)
Persist Security Info
false
When set to false or no (strongly recommended) securitysensitive information such as the password is not returned as part of the connection if the connection is open or has ever been in an open state Resetting the connection string resets all connection string values including the password
Recognized values are true false yes and no
持续安全信息
false
当该值设置为 false 或 no(强烈推荐)时如果连接是打开的或者一直处于打开状态那么安全敏感信息(如密码)将不会作为连接的一部分返回重置连接字符串将重置包括密码在内的所有连接字符串值可识别的值为 truefalseyes 和 no
User ID
The SQL Server login account (Not recommended To maintain a high level of security it is strongly recommended that you use the Integrated Security or Trusted_Connection keyword instead)
用户 ID
SQL Server 登录帐户(建议不要使用为了维护最高级别的安全性强烈建议改用Integrated Security 或 Trusted_Connection 关键字)
Workstation ID
the local computer name
The name of the workstation connecting to SQL Server
工作站 ID
本地计算机名称
连接到 SQL Server 的工作站的名称
Name
Default
Description
名称
默认值
说明
Connection Lifetime
When a connection is returned to the pool its creation time is compared with the current time and the connection is destroyed if that time span (in seconds) exceeds the value specified by Connection Lifetime This is useful in clustered configurations to force load balancing between a running server and a server just brought online
A value of zero () causes pooled connections to have the maximum connection timeout
连接生存期
当连接被返回到池时将其创建时间与当前时间作比较如果时间长度(以秒为单位)超出了由 Connection Lifetime 指定的值该连接就会被销毁这在聚集配置中很有用(用于强制执行运行中的服务器和刚置于联机状态的服务器之间的负载平衡)
零 () 值将使池连接具有最大的连接超时
Connection Reset
true
Determines whether the database connection is reset when being drawn from the pool For Microsoft SQL Server version setting to false avoids making an additional server round trip when obtaining a connection but you must be aware that the connection state such as database context is not being reset
连接重置
true
确定从池中提取数据库连接时是否重置数据库连接对于 Microsoft SQL Server 版设置为 false 可避免获取连接时再有一次额外的服务器往返行程但须注意此时并未重置连接状态(如数据库上下文)
Enlist
true
When true the pooler automatically enlists the connection in the creation threads current transaction context Recognized values are true false yes and no
登记
true
当该值为 true 时池程序在创建线程的当前事务上下文中自动登记连接可识别的值为truefalseyes 和 no
Max Pool Size
The maximum number of connections allowed in the pool
最大池大小
池中允许的最大连接数
Min Pool Size
The minimum number of connections allowed in the pool
最小池大小
池中允许的最小连接数
Pooling
true
When true the SQLConnection object is drawn from the appropriate pool or if necessary is created and added to the appropriate pool Recognized values are true false yes and no
池
true
当该值为 true 时系统将从相应池中提取 SQLConnection 对象或在必要时创建该对象并将其添加到相应池中可识别的值为 truefalseyes 和 no