1、ado.net技术概述
ado.net是一组允许.net开发人员使用标准的,结构化的,甚至无连接的方式与数据交互的技术。使用ado.net技术可以使用一致的访问方式操作多种数据源,包括数据库、xml、excel等。ado.net与ado是两种截然不同的数据访问技术,ado使用ole db接口基于微软com技术,而ado.net拥有自己的ado.net接口并且基于微软的.net技术。ado.net包含两组重要的类:DataSet类提供独立于任何数据源的数据访问,由一些DataTable的集合组成;DataProvider作为数据提供程序,负责与外部数据源的通信,具体操作包括连接数据库、执行命令和检索结果。.net在ado.net的基础上还提供了ef、linq等技术来简化数据的访问。
2、.net数据提供程序
.net数据提供程序的核心组件包括Connection对象、Command对象、DataReader对象、DataAdapter对象、Parameter对象、ConnectionStringBuilder对象和CommandBuilder对象等。
不同的数据源使用不同的.net数据提供程序。
(1)用于 SQL Server 的数据提供程序,提供对 Microsoft SQL Server 7.0 或更高版本中数据的访问。使用 System.Data.SqlClient 命名空间。用于 SQL Server 的数据提供程序使用自己的协议与 SQL Server 进行通信。它轻量且性能良好。支持本地事务和分布式事务。
(2)用于 OLE DB 的数据提供程序,提供对使用 OLE DB 公开的数据源中数据的访问。使用 System.Data.OleDb 命名空间。用于 OLE DB 的数据提供程序通过 COM 互操作使用本机 OLE DB 来启用数据访问。支持本地事务和分布式事务。 如Microsoft Access数据库。
(3)用于 ODBC 的数据提供程序,提供对使用 ODBC 公开的数据源中数据的访问。使用 System.Data.Odbc 命名空间。用于 ODBC 的数据提供程序使用本机 ODBC 驱动程序管理器 (DM) 来启用数据访问。 支持本地事务和分布式事务。
(4)用于 Oracle 的数据提供程序,适用于 Oracle 数据源。用于 Oracle 的 .NET Framework 数据提供程序支持 Oracle 客户端软件 8.1.7 和更高版本,并使用 System.Data.OracleClient 命名空间。通过 Oracle 客户端连接软件启用对 Oracle 数据源的数据访问。 该数据提供程序支持 Oracle 客户端软件 8.1.7 版或更高版本。 该数据提供程序支持本地事务和分布式事务两者。
(5)EntityClient 提供程序,提供对实体数据模型 (EDM) 应用程序的数据访问。使用 System.Data.EntityClient 命名空间。
3、连接字符串
ado.net使用连接字符串来连接数据库,连接字符串需要提供数据源在哪里,使用什么样的数据格式,使用什么样的访问信任级别等连接信息。
(1)Sql Server的连接字符串
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
或者
Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;//不可信连接
或者
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;//可信连接
或者
Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;//可信连接
(2)Access连接字符串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=;
(3)MySql连接字符串
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
(4)DB2连接字符串
Server=myAddress:myPortNumber;Database=myDataBase;UID=myUsername;PWD=myPassword;
(5)Oracle连接字符串
Data Source=TORCL;User Id=myUsername;Password=myPassword;
连接字符串可以写死在代码中,也可以配置在配置文件中,也可以使用DbConnectionStringBuilder来构造。
SqlClient.SqlConnectionStringBuilder builder = new SqlClient.SqlConnectionStringBuilder();
builder.DataSource = @"(local)\SQLEXPRESS";
builder.InitialCatalog = "myDataBase";
builder.IntegratedSecurity = true;
4、Connection对象
(1)概述
Connection对象使用连接字符串访问数据源。不同的数据源有不同的连接对象。SqlConnection用于SQL Server的连接对象;OleDbConnection用于OleDb数据源的连接对象;OdbcConnection是用于ODBC数据源的连接对象;OracleConnection是用于Oracle数据库的连接对象。所有连接对象均继承自抽象类DbConnection。DbConnection类继承Compoent类,实现IDbConnection,IDisposable接口,该类封装了连接数据库的很多重要的方法和属性。
(2)Connection对象提供的方法
(3)Connection对象提供的属性
5、数据库连接池
创建数据库连接对象时可以指定是否使用数据库连接池,同时指定数据库连接池的最小和最大连接数。数据库连接池负责创建空闲的连接、移除无效的连接以及回收使用完的连接。使用数据库连接池可以避免重复创建及关闭数据库连接操作,提高数据库连接的使用效率,提高数据库操作的性能。连接使用完需要调用Connection对象的Close()或Dispose()方法将连接释放进连接池。
SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder();
connStr.DataSource = @".\SQLEXPRESS";
connStr.InitialCatalog = "master";
connStr.IntegratedSecurity = true;
connStr.Pooling = true; //开启连接池
connStr.MinPoolSize = 0; //设置最小连接数为0
connStr.MaxPoolSize = 50; //设置最大连接数为50
connStr.ConnectTimeout = 10; //设置超时时间为10秒
using( SqlConnection conn = new SqlConnection(connStr.ConnectionString))
{
;//todo
}
6、Command对象
(1)概述
Command对象封装了所有对外部数据源的操作(增、删、改、查及存储过程),并在执行完成后返回合适的结果。对于不同的数据源使用不同的Command对象。OleDbCommand对象用于 OLE DB 的数据源; SqlCommand对象用于 SQL Server数据库;OdbcCommand 对象用于 ODBC 的数据源;OracleCommand 对象用于Oracle数据库。所有对象均继承自抽象类DBCommand,DBCommand类继承Component类,实现IDbCommand, IDisposable接口。
(2)Command对象提供的方法
Command对象提供了对应的异步方法,如ExecuteNonQuery()方法对应的异步方法是BeginExecuteNonQuery()和EndExcuteNonQuery()。
(3)Command对象提供的属性
7、Parameter对象
(1)概述
Parameter对象定义了命令和存储过程的输入、输出和返回参数。对于不同的数据源来说,Parameter对象不同。SQLServer 数据源使用SqlParamter对象;Ole DB 数据源使用OleDbParameter对象;ODBC 数据源使用OdbcParamter对象;Oracle数据源使用OracleParameter对象。它们均继承自DbParameter对象。
(2)Parameter对象提供的属性
8、DataAdapter对象
(1)概述
DataAdapter对象是外部数据源与本地DataSet之间的桥梁,将从外部数据源检索到的数据合理正确的调配到本地的DataSet中,同时将本地DataSet的数据更新同步到数据库,并执行更新命令。
(2)DataAdapter对象提供的属性
(3)DataAdapter对象提供的方法