扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
ADO.NET
ADO.net是.NET Framework中的一套类库,它将会让您更加方便地在应用程序中使用数据。Microsoft收集了过去几十年中最佳的数据连接的实践操作,并编写代码实现这些实践。这些代码被包装进了一些对象中,以便其他软件可以方便地使用。
ADO.NET中的代码处理了大量的数据库特有的复杂情况,所以当ASP.NET页面设计人员想读取或者写入数据时,他们只需编写少量的代码,并且这些代码都是标准化的。就像ASP.NET一样,ADO.NET不是一种语言。它是对象(类)的集合,在对象(类)中包含了由Microsoft编写的代码。可以使用诸如Visual Basic或者C#等编程语言来在对象外部运行这些代码。
可以将ADO.NET看作是一个介于数据源和数据使用者之间的非常灵巧的转换层。ADO.NET可以接受数据使用者语言中的命令,然后将这些命令转换成在数据源中可以正确执行任务的命令。但是,就像您将会看到的那样,ASP.NET 2.0提供了服务器端数据控件,可以更方便地与ADO.NET交互工作,所以有的时候这基本上减少了直接使用ADO.NET对象的需求。
很多读者已经有使用ASP.NET早期版本的经验了。这一小节将回顾一下这种模式,目的是演示您需要通过ADO.NET对象将数据引入Web页中的这一过程。对那些从来都没有使用过早期版本的读者来说,可以将本小节作为一个新奇的故事,类似于在发现乙醚之前进行的外科技术研究。在以前,创建一个简单典型的ASP.NET 1.x版本的页面需要如下代码:
<script runat="server">
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
BulletedList1.DataSource = GetAuthorsByState("CA")
BulletedList1.DataBind()
End Sub
Shared Function GetAuthorsByState(ByVal state As String) As System.Data.DataSet
Dim connectionString As String =
"server=(local); database=pubs; trusted_connection=true"
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)
Dim queryString As String = "SELECT [authors].[au_id], [authors].[au_fname], [authors].[au_lname], [authors].
[state] FROM [authors] WHERE ([authors].[state] = @state)"
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
Dim dbParam_state As System.Data.IDataParameter = New System.Data.SqlClient.SqlParameter
dbParam_state.ParameterName = "@state"
dbParam_state.Value = state
dbParam_state.DbType = System.Data.DbType.StringFixedLength
dbCommand.Parameters.Add(dbParam_state)
Dim dataAdapter As System.Data.IDbDataAdapter = New System.Data.SqlClient.SqlDataAdapter
dataAdapter.SelectCommand = dbCommand
Dim dataSet As System.Data.DataSet = New System.Data.DataSet
dataAdapter.Fill(dataSet)
Return dataSet
End Function
</script>
<html><head runat="server"><title>Untitled Page/title></head>
<body>
<form id="form1" runat="server"><div>
<asp:BulletedList ID="BulletedList1" DataTextField= "au_lname" Runat="server" />
</div></form>
</body></html>
以上示例对数据库执行了一条简单的SQL SELECT语句,并将结果与一个BulletedList控件绑定。页面中有一个名为GetAuthorsByState的方法,该方法创建了用来完成这个任务的几个ADO.NET对象:
· SqlConnection对象表示与数据库服务器进行连接
· SqlCommand对象表示要执行的SQL SELECT命令
· SqlParameter对象代表了一个将被命令中的标记代替的值
· SqlDataAdapter表示填充命令中的DataSet对象的能力
· DataSet表示命令结果,可以与BulletedList进行绑定
在Page_Load事件中,调用GetAuthorsByState方法并生成DateSet结果,然后将这个结果赋给BulletedList的DataSource属性。接着,调用DataBind()使得BulletedList用这个数据结果将自己同步。我们在页面执行生存期中的适当的时候调用DataBind(),这样的做法是ASP.NET 2.0在一般情况下寻找并消除的一个关键步骤。实际上,在大多数情况下, ASP.NET 2.0根本不需要与ADO.NET进行交互操作。但是,理解上述ADO.NET对象之间的关系是非常有用的,这样我们就可以讨论 ASP.NET 2.0是如何改进这个模式的。
ASP.net 2.0和数据访问
ASP.NET 2.0给我们提供了一个改良的数据访问模式,这个模式减少了在 ASP.NET 1.x中执行数据绑定所需的代码量。首先,无需编程实现实例化、设置属性以及调用前述列表中的ADO对象的方法。您需要做的就是在页面上简单地添加服务器端控件并设置属性。当呈现页面时,ASP.NET 2.0将会自动地执行所有的对象实例化,并调用方法创建并显示数据。请将以下ASP.NET 2.0代码与上面的代码进行对比:
<html>
<head runat="server"><title>Demo</title></head>
<body>
<form id="form1" runat="server">
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT au_lname FROM authors WHERE (state = @state)"
ConnectionString="Server=HPSERV; Integrated Security=True;Database=pubs">
<SelectParameters>
<asp:Parameter Type="String" DefaultValue="CA" Name="state" />
</SelectParameters>
</asp:SqlDataSource>
<asp:BulletedList ID="BulletedList1" runat="server" DataSourceID="SqlDataSource1"
DataTextField="Au_lname">
</asp:BulletedList>
</form>
</body></html>
第二个改进来自于对在页面生存期中的事件敏感的服务器端控件。ASP.NET 2.0 服务器端控件能够在正确的时间做出正确的动作。请注意在ASP.NET 2.0页面中对页面生存期中的事件的任何引用。ASP早期版本的学生一般都会对在页面生存期中执行多种任务感到迷惑,特别是数据绑定。因此,很多ASP.NET 1.x页面都会有这样的让程序员编写代码的遭遇,即在错误的事件下调用DataBind,或者在多个事件中多次调用DataBind。这些定时操作现在都可以通过ASP.NET 2.0的服务器端数据控件来自动完成。
请注意在前面的ASP.NET 2.0的代码中使用了两个服务器端控件。第一个是数据源控件,本例中是SqlDataSource控件。该控件在后台建立了所有显示数据所需的ADO连接对象,包括Connection、Command以及DataReader或者Dataset对象。然后,使用了一个名为BulletedList的数据绑定控件,用来获取数据源控件的数据,并在页面上呈现。
术语
在完成介绍性内容之前,我将提供一个到目前为止所用到的术语表。
· 动态Web页—— 作为代码存储在Web服务器上的文件,当被请求时,可转换为HTML。当页面被转换时,他们可以根据用户和网站拥有者的实时情况而按照不同的请求来获取不同的表单。
· IIS—— 在Windows中内置的Web服务器,用于通过TCP/IP向请求者提供Web页。运行于Windows 2000或者Windows XP Professional上的IIS可以使用.NET Framework类来提供ASP.NET Web页。
· .NET Framework—— 一组包含Microsoft编写的代码的类,可以使得开发应用程序更加方便和快捷,并且更易于在互联网上运行。很多类都已经被封装进能够启用.NET 的大约十多个Microsoft产品当中了。
· CLR(公共语言运行库)—— .NET Framework的一项特性,可以让编程人员用多种语言编写代码,然后将代码编译成可用来部署的单独、统一的语言。
· ASP.NET—— .NET Framework中的运行时和类库集,用来创建动态Web应用程序。
· 数据存储—— 数据被存放和管理的地方。所有的RDBMS都可用于数据存储,但是有些数据存储就不是RDBMS,因为它们不是关系型的。
· 数据库或关系型数据库管理系统(RDMS)—— 一种可以读取和操纵数据的软件。大多数系统包含了用来设计和测试数据库的工具,以及优化过程的工具。一个RDBMS必须按照标准化形式(关系型格式)存储数据。
· DataBase模式(或数据库元数据)—— 数据库结构,包括表和关系的设计。该模式不包括实际的数据值。
· MicrosoftTM Access—— 一种基于MDB文件格式、JET引擎以及一系列用于创建和使用数据库的工具的RDMS。Access价格便宜,容易学习,能被广泛接受并且已经被部署到很多机器上。但是,它不支持太多的并发用户。
· JET—— 运行在后台并使用MDB(Access)文件的数据库引擎。JET可以直接从其他软件(例如.NET或Access)接受命令来读取或者修改MDB文件。
· 结构化查询语言(Structured Query Language,SQL)—— 一种被数据使用者用来从数据提供程序那里请求读取或者写入数据的语言。经过近十年的发展,SQL已经成为与RDBMS通信的标准。
· MicrosoftTM SQL Server—— 一种企业级的RDBMS,可以支持大量的数据和大量的并发用户。
· MicrosoftTM SQL Server Express(SSE)—— 基于Microsoft SQL Server数据库引擎的可免费获得的数据库引擎。与SQL Server不同的是,SSE能提供的同时数据连接数量有限,并且只有少数几个功能。本书将在大多数示例中使用SSE。
· MicrosoftTM Data Engine(MSDE)—— 与SSE类似,但是基于SQL Server引擎的早期版本。MSDE将在本书的练习中使用。
· XML—— 一种标准的数据格式,每个值都被存储并描述。XML不是非常有效率(用于描述的空间通常会超过数据的大小),但是却能被很多不同的数据管理系统方便地读取。
· Web页编辑器—— 一种允许打开和修改页面的软件。最常用的编辑器是记事本。Visual Studio、Visual Web Developer和ASP.NET Web Matrix与其他工具打包成一个编辑器,用以提高效率。 · 集成开发环境(Integrated Development Environment,IDE)—— 一套用来帮助编程人员开发代码的工具。Visual Studio就是一个非常强大的IDE;Web ASP.NET Web Matrix也提供了很多工具。典型的IDE应当包含一个Web页编辑器。
· ADO.NET—— 由Microsoft编写的类(代码)的集合,作为数据存储(例如Access或者XML文件)和数据使用者(例如ASP页面)之间的中间件。
· 连接—— 一个ADO对象,表示数据使用者和数据提供程序之间的惟一路径。
· 命令—— 一个ADO对象,表示一条可以被传递给数据库的SQL语句。
· 参数—— 一个ADO对象,表示在语句进入数据库之前可以被插入Common Object(SQL语句)中的多个数据。
· DataSet—— 一个ADO对象,表示集成至记录或字段中的一组数据。
· 服务器控件—— 一组独立的代码(一个对象),用于在服务器上执行任务,生成兼容HTML的并且发送至浏览器的页面。通过ViewState,服务器端控件可以维持其状态。
· 数据源控件—— 一种服务器端控件,可以创建专门的、惟一的数据库连接。它提供了ADO对象的一种抽象并且使得编写ASP.NET 2.0页面更加快速和容易。数据源控件可用于Microsoft SQL Server、Access、XML以及其他数据源。
· 数据绑定控件—— 一种服务器端控件,可以从数据源控件中获得数据并在页面上呈现它。数据绑定控件将程序员从编写诸如<table>的HTML标记中解脱出来。数据绑定控件可用于呈现表格、列表、树型以及其他结构。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者