ADO.NET数据库编程
1、ADO.NET的相关概念。
Microsoft的新一代技术,是ADO组件的后继者。 主要目的是在.NET Framework平台存取数据。
提供一致的对象模型,可以存取和编辑各种数据源的数据,即对这些数据源,提供了一致的数据处理方式。
ADO.NET保存和传递数据是使用XML格式。可实现与其他平台应用程序以XML文件进行数据交换。
2、数据访问类库的名称空间
针对不同的数据源,使用不同名称空间的数据访问类库,即数据提供程序。常用的数据源包括四种:
Microsoft SQL Server数据源:使用System.Data.SqlClient名称空间。 OLEDB数据源:使用System.Data.OleDb名称空间。 ODBC数据源:使用System.Data.Odbc名称空间。 Oracle数据源:使用System.Data.OracleClient名称空间
要使用ADO.NET 来访问数据库,需要将相应的名称空间导入到应用程序中,如下: System.Data是通用的名称空间,其中包含组成ADO.NET核心体系结构的所有类。 System.Data.Oledb 名称空间供ADO.NET 管理提供程序访问支持OleDb的数据源时使用。
System.Data.SQLClient 名称空间供 SQL Server管理提供程序使用。该名称空间是专为 Microsoft SQL Server 而设计的,对于以前版本的 SQL Server,可以提高其性能。
如:using System.Data;
using System.Data. SqlClient;
System.Data.OleDb和System.Data.SqlClient名称空间的类名称相同,只是字头不同。 之所以分成两组类,主要目的是提供一组最佳化SQL Server数据库存取的类。 OleDb字头的类是使用OLEDB提供者数据源的数据库。例如Access和Oracle等数据库。 Sql字头的类只能使用在SQL Server7.0以上版本,直接和服务器端的SQL Server通信,因为不通过OLE DB和ODBC,所以可以明显提升整体的执行效率。 3、ADO.NET的组成
ADO.NET用于访问和处理数据的类库包含以下两个组件: .NET Framework 数据提供程序
DataSet
ADO.NET 数据提供程序的四个核心对象: Connection建立到指定资源的连接 Command对一个数据源执行命令。公开Parameters,在 Connection 的 Transaction 范围内执行。
DataReader从一个数据源读取的只读数据流。
DataAdapter填充一个 DataSet,解析数据源的更新。
ADO.NET是使用Connection对象建立与数据源的数据链路,然后使用Command对象执行命令来获取数据源的数据,对数据库来说就是使用SQL命令。
在获取数据源的数据后,就可以填入DataReader或DataSet对象,最后使用数据绑定在Web控件显示记录数据。
Connection对象
可以建立与数据源间的连接;对数据库来说,还负责初始化数据库。 有两种:OleDbConnection对象和SqlConnection对象。
Web服务器和数据库系统本属于两套不同的应用程序,通过ODBC或OLE DB可以打开数据源的数据库,Connection对象进一步将ASP.NET程序和数据库连接起来。
Command对象
可以对数据源执行命令,对数据库来说,就是执行SQL命令。
ASP.NET程序可以使用Command对象发送SQL命令来插入、删除、更新和查询数据表的记录。
需要先使用Connection对象建立数据库连接后,才能使用Command对象执行SQL命令。 两种:OleDbCommand对象和SqlCommand对象。 DataReader对象
可以从数据源使用Command对象执行命令,获取“只读”(Read-Only)和“只能向前”(Forward-Only)的流数据。
每次只能从数据源读取一行数据保存到内存。
获取的数据为只读,不允许插入、删除和更新记录,其目的是显示查询结果。 两种:OleDbDataReader对象和 SqlDataReader对象。
DataAdapter 和 DataSet 类满足了支持数据库访问的断开连接模型这一需求。 DataSet 是 ADO.NET 断开连接体系结构中主要的数据存储工具。填充 DataSet 时,必须创建一个 DataAdapter 来填充 DataSet。
DataAdapter 连接数据库,执行查询并填充 DataSet。当 DataAdapter 调用 Fill 或 Update 方法时,在后台完成所有的数据传输。每个 .NET Framework 的数据提供程序都有一个 DataAdapter 对象。 DataAdapter 能控制与现有数据源的交互。DataAdapter 也能将对 DataSet 的变更传输回数据源中。
一个 DataSet 代表一组完整的数据,包括表格、约束条件和表关系。DataSet 能够存储代码创建的本地数据,也能存储来自多个数据源的数据,并断开到数据库的连接。
DataSet和DataTable对象
DataSet对象是由DataTable对象组成的集合对象,可代表保存在内存的数据库。 每一个DataTable保存一个数据表的记录数据,并且可以设定数据表间的关联性。 属于System.Data名称空间,用DataAdapter类的方法Fill()将数据表的数据填入DataSet对象。
可以在DataTable对象中插入和删除行,即处理数据表的记录,最后使用DataAdapter类将DAtaTable对象中的数据更新到数据库。 4、使用ADO.NET SQL命令执行数据库操作 分为两种方式:
使用ADO.NET的Command对象配合SQL语法; 使用ADO.NET的DataSet对象;
(1)可用Command对象执行SQL命令;用Connection对象来建立数据库连接。 步骤:
导入所需的名称空间; 建立和打开数据库连接; 建立Command对象;
执行SQL命令处理数据库; 关闭数据库连接; 实例演示。
建立Connection对象的语法: SqlConnection objcon;
objcon=new SqlConnection(strDbCon);
上述代码建立了名为objCon的SqlConnection对象。 strDbCon变量是数据源字符串,如:
strDbCon=\上述字符串中以“;”分隔
建立好Connection对象后,就可以使用Open()方法打开数据库连接: objCon.Open()
Connection对象的相关方法: Open()和Close()
Connection对象的相关属性:
ConnectionString;ConnectionTimeout Database;DataSource; Provider;State
上述属性在连接打开后都成为只读属性;
在连接打开前,可以设定这些属性,如: objCon.ConnectionTimeout=30
上述设定与在连接字符串中指定功能等同;
在打开数据库连接后,就可以建立Command对象来指定欲执行的SQL命令字符串: SqlCommand objcom;
objcom = new SqlCommand(strsql, objCon);
上述代码使用SqlCommand类建立Command对象;第一个参数是SQL命令字符串;第二个参数是建立的Connection对象:
实例演示:使用sql语句SELECT CategoryID, CategoryName FROM Categories,创建查询表Categories的命令的代码如下:
SqlCommand cmd;
cmd=new SqlCommand(\CategoryID, CategoryName FROM dbo.Categories\Command对象的相关属性:
Parameters:用来访问输入及输出参数和返回值。
SqlCommand支持命名参数。添加到Parameters集合的参数的名称必须与SQL语句或存储过程中的参数标记的名称相匹配。
OleCommand不支持命名参数,用问号占位符标记参数,则向Parameters集合中添加参数的顺序必须与定义的参数顺序相匹配。
如:
SqlParameter param; ?? objcmd = new SqlCommand(%username,password from userinfo where username like @name \
param = objcmd.Parameters.Add(\param.Value = tbname.Text;
SqlDataReader objdr = objcmd.ExecuteReader(); ??
Command对象的相关属性: CommandType:命令类型,
可选CommandType.StoredProcedure、 CommandType.Text、
CommandType.TableDirect 如:Sale是存储过程
cmd =new SqlCommand(“sale”,con)
cmd.CommandType=CommandType.StoredProcedure 在打开数据库连接,建立Command对象后,就可以用Command对象的ExecuteNonQuery()方法来执行SQL命令,如:
count=objCmd.ExecuteNonQuery()
Count可以获取响应的记录数。此方法不会回发记录数据。 Command对象公开了几个可用于执行所需操作的Execute方法: ExecuteReader:当以数据流的形式返回结果时,使用ExecuteReader可返回DataReader对象。
ExecuteScalar:使用ExecuteScalar可返回单个值。
ExecuteNonQuery:使用ExecuteNonQuery可执行不返回行的命令。
使用DataReader对象的Read方法可从查询结果中获取行。 例如,循环显示SqlDataReader—dtr的数据的代码如下: While(dtr.Read()) {
lblMessage+=\ lblMessage+=dtr[\ lblMessage+=\
lblMessage+=dtr[\姓名\}
完成数据库操作后,使用Connection对象的Close()方法关闭数据库连接: objCon.Close(); 实例演示。
小结:使用数据提供程序访问数据库操作的典型步骤如下:
建立数据库连接; 创建SQL命令; 执行SQL命令; 处理SQL命令结果。
实例演示用SQL命令实现数据的增、删、改功能。 课堂练习:按要求编写程序。 5、DataSet对象的数据库操作
DataSet对象的数据库操作需要将数据库先保存在内存的DataTable对象,然后在内存的数据表插入、删除和更新记录,最后使用DataAdpater对象更新数据表的记录数据。
使用DataAdapter和DataSet访问数据库的典型步骤如下: (1)建立数据库连接;
(2)建立DataAdapter对象;
如:SqlDataAdapter objDataAdapter=new SqlDataAdapter(strsql,objCon); (3)建立DataSet对象填入记录数据;
如:objDataAdapter.Fill(objDataSet,”Users”); (4)在DataTable中执行数据库操作; (5)更新数据表的记录数据。
如:count=objDataAdapter.Update(objDataSet,”Users”) (6)关闭数据库连接
DataSet对象使用DataAdapter对象来获取记录数据,它是DataSet和Connection对象数据源之间的桥梁,可以获取DataSet的记录数据和更新数据源的记录数据。
如:
SqlDataAdapter objadapter;
sqlstr=“select * from userinfo”;
objadapter=new SqlDataAdapter(sqlstr,objcon);
SqlCommandBuilder objcmdbuilder =new SqlCommandBuilder(objadapter) ‘上述代码建立的对象配合Dataset,可自动生成所需的SQL命令
DataAdapter的Fill方法使用DataAdapter的SelectCommand的结果集来填充DataSet。 例如:
SqlConnection con;