第十三讲 ADO.NET基础知识
Connection对象与 Command对象教学目的:
一,ADO.NET概述二,Connection对象三,Command对象教学重点一,ADO.NET的工作原理二,Connection对象的应用三,Command对象的应用一,ADO.NET概述
ADO.NET的设计专门优化了使用 SqlClient
访问数据的过程,并使用 ADO.NET对象实现其数据处理。其对象模式与 ADO类似,
由 Connection(提供与数据源的连接)对象和 Command对象(执行数据库命令以返回修改数据,运行存储过程等)组成。
ADO.NET提供对 SQL Server等数据源以及通过 OLEDB和 XML公开数据源的一致访问。
数据共享使用者应用程序可以使用ADO.NET来连接到这些数据源,并检索、
操作和更新数据。
ADO.NET是一组访问数据源的面向对象的类库。简单的理解,数据源 就是数据库,它同时也能够是文本文件,Excel表格或者
XML文件。 我们以 SQL Server 2000为示例数据库服务器。
5
C o n n e c t i o n C o m m a n d
D a t a A d a p t e r
D a t a R e a d e r
D a t a S e t
C o n n e c t i o n C o m m a n d
D a t a A d a p t e r
D a t a R e a d e r
D a t a S e t
数 据 库
★★★ ADO.NET断开式 数据库操作二,Data Providers(数据提供者 )
我们需要 与不同类型的数据源或者数据库交互。
ADO.NET提供了访问数据源的公共方法,
对于不同的数据源,它采用不同的类库。
这些类库称为 Data Providers,并且通常是以数据源的类型以及协议来命名的。
表 1列出了常见的一些 data providers,
以及它们所使用的 API前缀 和交互的 数据源类型 。
表 1,API的开头字符表明了他们支持的协议。
Provider API 前缀 数据源描述
ODBC Data
Provider
Odbc 提供 ODBC接口的数据源。一般是比较老的数据库。
OleDb Data
Provider
OleDb 提供 OleDb接口的数据源,
比如 Access或 Excel。
Oracle Data
Provider
Oracle Oracle数据库
SQL Data
Provider
Sql Microsoft SQL Server数据库
Borland Data
Provider
Bdp 通用的访问方式能访问许多数据库,比如 Interbase、
SQL Server,IBM DB2和
Oracle。
理解表格中的 API前缀
在 这里你将学习到的第一个 ADO.NET对象是 连接对象 ( connection object),顾名思义,
你可以通过它建立与数据源的连接。如果我们使用 OleDb Data Provider连接一个提供 OleDb
接口的数据源,那么我们将使用连接对象就是
OleDbConnection。同理,如果连接 Odbc数据源或者 SQL Server数据源就分别加上 Odbc或者
Sql前缀,即 OdbcConnection或 SqlConnection。
在本教程里使用的是数据源是 SQL Server,所以你会发现所有的 API对象都带有 Sql前缀,比如 SqlConnection。
ADO.NET对象数据库
XxxConnection
XxxCommand
XxxDataReader
DataSet
XxxDataAdapter
SqlServer,Access等连接对象命令对象数据适配器数据集数据阅读器图 ADO.NET中几个基础对象间的关系
XxxCommand
XxxConnection
数据库应用程序使用应用程序使用
1,The SqlConnection Object(连接对象 )
要访问一个数据源,你必须先建立一个到它的连接。这个连接里描述了数据库 服务器类型,数据库名字,用户名,密码,和连接数据库所需要的其它参数。 Command
对象通过使用 Connection对象来知道是在哪个数据库上面执行 SQL命令。
三、数据对象概述
2,The SqlCommand Object(命令对象 )
连接数据库后就可以开始想要执行的数据库操作,这个是通过 Command对象完成,
Command对象一般被用来发送 SQL语句给数据库 。 Command对象通过 Connection对象知道应该与哪个数据库进行连接 。我们既可以用
Command对象来直接执行 SQL命令,也可以将一个 Command对象的引用传递给
SqlDataAdapter,SqlDataAdapter能包含一系列的 Command对象,可以处理大量数据,
3,The SqlDataReader Object (数据读取器对象 )
根据经验,许多数据库操作要求我们仅仅只是需要读取一组数据 。 这时候就用到了
DataReader对象。
通过 DataReader对象,我们可以获得从
Command对象的 SELECT语句得到的结果。
考虑到性能方面的因素,DataReader返回的数据流被设计为 只读的,单向的,这将意味着你只能按照一定的顺序从数据流中取出数据。
虽然你在这里也获得了性能上的提升,但是缺点也是明显的,不能够操作取回数据,如果需要操作编辑数据,解决的办法是使用 DataSet。
4,The SqlDataAdapter Object(数据适配器对象 )
某些时候我们只需要读数据,并且你不需要修改它们把更改写回数据源。 但是还有这样一些情况为了减少数据库调用的次数,我们把数据缓存在内存中 。
DataAdapter通过断开模型来轻松的实现了后面这种情况的处理。 当批量完成的对数据库的读写操作的并将改变写回数据库的时候,
DataAdapter 会填充( Fill) DataSet对象。
DataAdapter里包含了 Connection对象,当对数据源进行读取或者写入的时候,DataAdapter会自动的打开或者关闭连接 。
此外,DataAdapter还包含对数据的 SELECT,INSERT,
UPDATE和 DELETE操作的 Command对象引用。如果我们为
DataSet中的每一个 table都指定 DataAdapter,它将会帮你处理好所有与连接处理数据库的操作,我们所需要做的仅仅就是告诉 DataAdapter r什么时候读取或者写入到数据库。
核心:
DataAdapter是作为数据源和 DataSet之间的桥梁工具来使用的
5,The DataSet Object(数据集对象 )
DataSet对象用于表示那些储存在内存中的数据。它包括多个 DataTable对象,
DataTable就象一个普通的数据库中的表一样,也有行和列,我们甚至能够通过定义表和表之间的关系来创建从属关系。 DataSet主要用于管理存储在内存中的数据以及对数据的断开操作。 注意,
由于 DataSet对象能被所有 Data
Providers使用,它不需要指定前缀。
总结
ADO.NET是用于和数据源打交道的,NET技术。它包含了许多的 Data Providers,分别用于访问不同的数据源 ―― 取决于它们所使用的数据库或者协议。然而无论使用什么样的 Data
Provider,与数据源进行交互的对象的使用方法都是相似的。 SqlConnection对象用于管理与数据源的连接 。 SqlCommand对象可以向数据源发送 SQL命令 。 SqlDataReader可以快速的从数据源获得只读的,向前的数据流 。使用
DataSet可以处理那些已经断开的数据(储存在内存中的),并通过 SqlDataAdapter实现数据源的读取和写入 。
NameSpaces(命名空间)
ADO.NET所有的程序都需要使用以下的
NameSpaces:
Using System.Data;
Using System.Data.SqlClient ;
四,Connection对象
为了连接数据库,必须使用 Connection类的对象,但要打开 SQL Server数据库,我们可以用 SqlConnection类的对象。使用方法如下,
DataSource:数据源 local:本地计算机
Initial Catalog:数据库 User ID:数据库登陆账户 password:密码
SqlConnection conn=new SqlConnection
(“Data Source=(local);Initial Catalog=Northwind;
User ID=sa ; password=1234;”);
Provider:设置数据源的 OLE DB驱动程序 。
Data Source:设置数据源的实际路径 。
Password:设置登录数据库时所使用的密码 。
User ID:设置登录数据库时所使用的帐号 。
Data Source,设置需连接的数据库服务器名 。
Initial Catalog:设置连接的数据库名称 。
Integrated Security:服务器的安全性设置,是否使用信任连接 。
Workstation Id:数据库客户端标识 。
Packet Size:获取与 SQL Server通信的网络数据包的大小,单位为字节。
Connection Timeout:设置 SqlConnection对象连接
SQL数据库服务器的超时时间。
上面一直提到 ConnectionString,一般连接 sql server的字符串为:
Data source = serverName;Initial
catalog =contract;user id
=sa;password= yourpassword;
如果你的 sql server使用的是 Windows集成密码,则是:
Data source = serverName;Initial
catalog = contract;Integrated
Security= SSPI;
当然,你也可以将具体的 连接参数 (用一个字符串变量记录下来)作为变量使用,在连接数据库以后,必须打开数据库:
conn.Open(); //打开数据库
这样,就可以使用数据库了
一般在最后,我们都要求关
闭数据库连接:
Conn.Close();
//关闭数据库通常这种使用
//创建连接数据库的字符串
String
sqlStr="Server=(local);
UserId=sa;Pwd=;DataBase=pubs
";
//创建 SqlConnection对象
SqlConnection con = new
SqlConnection(SqlStr);
//打开数据库的连接
con.Open();
//......数据库相关操作
//关闭数据库的连接
con.Close();
总结:
创建连接对象:
SqlConnection conn=new SqlConnection();
conn.ConnectonString=“server=(local);
database=pubs; user id=sa; password=123”;
//设置连接字符串属性打开与数据源的连接:
conn.Open();
关闭与数据源的连接:
conn.Close();
五,Command对象
Command对象可用来存放要对 SQL Server数据库执行的一个 T-SQL语句或存储过程,并能执行该 T-SQL语句或存储过程,利用
Command对象可直接对数据库进行处理,
1,Command对象的属性属性 说明
CommandText 获取或设置要对数据源执行的 Transact-SQL语句或存储过程 。
CommandTime
out
获取或设置在终止执行命令的尝试并生成错误之前的等待时间 。
CommandType 获取或设置一个值,该值指示如何解释 CommandText属性 。
Connection 获取或设置 SqlCommand的实例使用的 SqlConnection。
Container 获取 IContainer包含 Component。
Parameters 获取 SqlParameterCollection。
Transaction 获取或设置在其中执行 SqlCommand的事务 。
UpdateRowSo
urce
获取或设置命令结果由 DbDataAdapter的 Update方法使用时如何应用于 DataRow。
2,Command对象的创建
以下语句建立 Command,根据习惯不同,可以使用以下两种方法,
SqlCommand cmd=new SqlCommand();
cmd.Connection=con;
cmd.CommandText=”select * from users”;
SqlCommand cmd=new SqlCommand
(“select * from users”,con);
☆ 使用 Command对象的三个步骤:
1、创建 Command对象
2、将 Command对象与 Connection对象关联
Command.connection=conn
3、设置 Command对象的 Commandtext属性
3,Command对象的使用
仔细观察上面的语句,我们发现在定义
SQLCommand时,可以同时使用数据库连接
SQLConnection对象和数据库连接语句。 以上代码并没有执行 SQL语句,现在我们来看到底怎样执行,
主要有三个方法,
ExecuteNonQuery( ):无返回结果集的查询函数
ExecuteReader( ),返回一个 DataReader对象
ExecuteScalar( ),返回一个单一值的函数
(1) ExecuteNonQuery( ),删除数据 \更新数据 \插入数据
(不需要返回数据)时,该方法返回受影响的行数,但不返回结果集,
★★ 当执行没有返回数据的操作的时候,我们可以使用以上方法,比如插入数据、更新数据等操作,具体这样执行:
//创建连接对象
SqlCommand cmd = new SqlCommand(insertString,
conn);
//执行非查询化命令
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
更新命令,
//创建连接对象
string str = "update Categories
set CategoryName = 'Other‘ where
CategoryName = 'Miscellaneous'";
SqlConnection conn=new
SqlConnection(updateString);
//创建命令
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText=str;
//执行命令
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
删除命令
//创建连接对象
string str = " delete from
Categories where CategoryName =
'Other'";
SqlConnection conn=new
SqlConnection(updateString);
//创建命令
SqlCommand cmd = new
SqlCommand();
cmd.Connection = conn;
cmd.CommandText=str;
//执行命令
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
插入数据命令
//创建连接对象
string str = " insert into Categories(abc,bcd)
values(“111“,“222");
//创建命令
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText=str;
//执行命令
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
(2) ExecuteReader:
查询数据,快速返回一个向前的结果集,
在需要一个 DataReader的时候,我们可以使用以上方法,
具体这样执行:
SqlCommand cmd = new SqlCommand("select
CategoryName from Categories",conn);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
conn.Close();
(3) ExecuteScalar()
得到单一值,该方法用于执行一个返回单个标题值的
SQL语句或存储过程,它将结果集中的第一列的第一个值返回给调用语句,并忽略其它所有返回值,
★ 使用 ExecuteScalar方法来取得一个单个地返回数据,比如对数据的统计。
SqlCommand cmd = new SqlCommand("select count(*)
from Categories",conn);
conn.Open();
int count = (int)cmd.ExecuteScalar();
conn.Close();
总结:在线处理数据的方式
XxxDataReader
连接对象命令对象 XxxCommand
XxxConnection
数据库应用程序使用数据读取器
Select类型命令 Insert,update,delete类型命令应用程序使用
相关应用见课本 4.2