⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webdataaccess.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
📖 第 1 页 / 共 4 页
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>服务器端数据访问</h4>
<p>

<div class="indent" style="font-family:Verdana; font-size:8pt;">
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#serverdata">服务器端数据介绍</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#adoplus">连接、命令和数据集</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#sqldata">访问基于 SQL 的数据</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#select">将 SQL 数据绑定到 DataGrid</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#param">执行参数化选择</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#insert">在 SQL 数据库中插入数据</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#update">更新 SQL 数据库中的数据</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#delete">删除 SQL 数据库中的数据</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#sort">将 SQL 数据库中的数据排序</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#masterdetail">处理主-从关系</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#storedprocs">编写和使用存储过程</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#xmldata">访问基于 XML 的数据</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#summary">本节小结</a><br>
</div>
<p>
<hr>

<!--BEGIN SECTION--> <a name="serverdata"><span class="subhead">服务器端数据介绍</span>

<p>
数据访问是任何实际应用程序的核心部分,而 ASP.NET 提供了一套丰富的控件,这些控件与公共语言运行库中提供的托管数据访问 API 很好地集成在一起。本节多次演练同一个示例,该示例使用 ASP.NET <b>DataGrid</b> 控件绑定到 SQL 查询的结果和 XML 数据文件。本节假定您熟悉数据库基础知识和 SQL 查询语言。</p>

<p>
服务器端数据访问很独特,因为 Web 页基本上是无状态的。当试图执行事务时,如插入或更新从数据库检索的数据集中的记录时,这向我们提出了某些困难的挑战。正如将在本节中看到的,<b>DataGrid</b> 控件可以帮助应付这些挑战,使您得以更多地集中在应用程序逻辑上,对状态管理和事件处理的具体细节则不用考虑太多。</p>

<!--BEGIN SECTION--> <br> <a name="adoplus"><br> <span class="subhead">连接、命令和数据集</span>
<p>
公共语言运行库为数据密集的应用程序开发提供了完整的托管数据访问 API 集。这些 API 帮助抽象数据并用一致的方法表示数据,与实际的数据源(SQL Server、OLEDB、XML 等)无关。最常使用的对象基本上有三种:连接、命令和数据集。</p>

<ul>
<li>连接表示与某些数据存储区(如 SQL Server 或 XML 文件)的物理连接。
<li>命令表示从数据存储区检索(选择)或对数据存储区进行操作(插入、更新、删除)的指令。
<li>数据集表示应用程序使用的实际数据。注意,数据集总是同它们的源连接和数据模型断开并可独立修改。不过,数据集的更改可以很容易与起始数据模型相协调。
</ul>

<p>有关公共语言运行库中托管数据访问解决方案的更详细演练,请阅读本教程的 <a href="/quickstart/aspplus/doc/adoplusoverview.aspx">ADO.NET 概述</a>一节。

<!--BEGIN SECTION--> <br> <a name="sqldata"><br> <span class="subhead">访问基于 SQL 的数据</span>
<p>

应用程序一般需要对 SQL 数据库执行一个或多个选择、插入、更新或删除查询。下表显示上述每个查询的示例。
<p>

<table class="table2" width="80%" cellpadding=3>
<tr>
<th width="150">
查询
</th>
<th>
示例
</th>
</tr>
<tr>
<td>
<b>简单选择</b>
</td>
<td>
SELECT * from Employees WHERE FirstName = 'Bradley';
</td>
</tr>
<tr>
<td>
<b>联接选择</b>
</td>
<td>
SELECT * from Employees E, Managers M WHERE E.FirstName = M.FirstName;
</td>
</tr>
<tr>
<td>
<b>插入</b>
</td>
<td>
INSERT into Employees VALUES ('123-45-6789','Bradley','Millington','Program Manager');
</td>
</tr>
<tr>
<td>
<b>更新</b>
</td>
<td>
UPDATE Employees SET Title = 'Development Lead' WHERE FirstName = 'Bradley';
</td>
</tr>
<tr>
<td>
<b>删除</b>
</td>
<td>
DELETE from Employees WHERE Productivity  &lt; 10;
</td>
</tr>

</table>
<p>
为了使页能够访问执行 SQL 数据访问所需的类,必须将 <b>System.Data</b> 和 <b>System.Data.SqlClient</b> 命名空间导入到页中。
<p>

<div class="code"><pre>
&lt;%@ Import Namespace="System.Data" %&gt;
&lt;%@ Import Namespace="System.Data.SqlClient" %&gt;
</pre></div>

<p>
若要对 SQL 数据库执行选择查询,请创建与数据库的 <b>SqlConnection</b>,传递连接字符串,然后构造包含查询语句的 <b>SqlDataAdapter</b> 对象。若要用查询结果填充 <b>DataSet</b> 对象,请调用命令的 <b>Fill</b> 方法。
<p>

<p><Acme:TabControl runat="server">
<Tab Name="C#">
SqlConnection myConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);

DataSet ds = new DataSet();
myCommand.Fill(ds, "Authors");
</Tab>

<Tab Name="VB">
Dim myConnection As New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes")
Dim myCommand As New SqlDataAdapter("select * from Authors", myConnection)

Dim ds As New DataSet()
myCommand.Fill(ds, "Authors")
</Tab>

<Tab Name="JScript">
var myConnection:SqlConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes");
var myCommand:SqlDataAdapter = new SqlDataAdapter("select * from Authors", myConnection);

var ds:DataSet = new DataSet();
myCommand.Fill(ds, "Authors");
</Tab>

</Acme:TabControl>
<p>

正如本节前面所提到的,使用数据集的好处是它为您提供了断开连接的数据库视图。可以在应用程序中操作数据集,然后在以后协调更改和实际的数据库。对于长期运行的应用程序,这通常是最好的方法。对于 Web 应用程序,通常对每个请求执行短操作(一般只是显示数据)。通常不需要在一系列请求间保持 <b>DataSet</b> 对象。对于这类情况,可以使用 <b>SqlDataReader</b>。
<p>
<b>SqlDataReader</b> 对从 SQL 数据库检索的数据提供仅向前的只读指针。若要使用 <b>SqlDataReader</b>,请声明 <b>SqlCommand</b> 而不是 <b>SqlDataAdapter</b>。<b>SqlCommand</b> 公开返回 <b>SqlDataReader</b> 的 <b>ExecuteReader</b> 方法。还请注意,当使用 <b>SqlCommand</b> 时,必须显式打开和关闭 <b>SqlConnection</b>。调用 <b>ExecuteReader</b> 后,<b>SqlDataReader</b> 可以绑定到 ASP.NET 服务器控件,正如将在下一节看到的。


<p><Acme:TabControl runat="server">
<Tab Name="C#">
SqlConnection myConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes");
SqlCommand myCommand = new SqlCommand("select * from Authors", myConnection);

myConnection.Open();


SqlDataReader dr = myCommand.ExecuteReader();

...

myConnection.Close();
</Tab>

<Tab Name="VB">
Dim myConnection As SqlConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes")
Dim myCommand As SqlCommand = New SqlCommand("select * from Authors", myConnection)

myConnection.Open()


Dim dr As SqlDataReader = myCommand.ExecuteReader()

...

myConnection.Close()
</Tab>

<Tab Name="JScript">
var myConnection:SqlConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes");
var myCommand:SqlCommand = new SqlCommand("select * from Authors", myConnection);

myConnection.Open();

var dr : SqlDataReader;
dr = myCommand.ExecuteReader();

...

myConnection.Close();
</Tab>

</Acme:TabControl>
<p>


当执行不要求返回数据的命令(如插入、更新和删除)时,也使用 <b>SqlCommand</b>。该命令通过调用 <b>ExecuteNonQuery</b> 方法发出,而该方法返回受影响的行数。注意当使用 <b>SqlCommand</b> 时,必须显式打开连接;<b>SqlDataAdapter</b> 自动为您处理如何打开连接。
<p>

<p><Acme:TabControl runat="server">
<Tab Name="C#">
SqlConnection myConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes");
SqlCommand myCommand = new SqlCommand(
                   "UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'",
                    myConnection);

myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
</Tab>

<Tab Name="VB">
Dim myConnection As New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes")
Dim myCommand As New SqlCommand( _
                   "UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'",  _
                    myConnection)

myCommand.Connection.Open()
myCommand.ExecuteNonQuery()
myCommand.Connection.Close()
</Tab>

<Tab Name="JScript">
var myConnection:SqlConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes");
var myCommand:SqlCommand = new SqlCommand(
                   "UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'",
                    myConnection);

myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
</Tab>

</Acme:TabControl><p>

<p>
<b>重要说明:</b>始终记住在页完成执行之前关闭与数据模型的连接。如果不关闭连接,则可能会在等待页实例被垃圾回收处理期间不经意地超过连接限制。

<!--BEGIN SECTION--> <br> <a name="select"><br> <span class="subhead">将 SQL 数据绑定到 DataGrid</span>
<p>
下面的示例显示一个绑定到 <b>DataGrid</b> 控件的简单选择查询。<b>DataGrid</b> 呈现包含 SQL 数据的表。

<p>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/CS/datagrid1.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid1.src"
  Icon="/quickstart/aspplus/images/datagrid1.gif"
  Caption="C# DataGrid1.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid1.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid1.src"
  Icon="/quickstart/aspplus/images/datagrid1.gif"
  Caption="VB DataGrid1.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid1.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid1.src"
  Icon="/quickstart/aspplus/images/datagrid1.gif"
  Caption="JScript DataGrid1.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>

与“数据绑定”节中显示的 <b>DropDownList</b> 一样,<b>DataGrid</b> 控件也支持 <b>DataSource</b> 属性。该属性除了采用 <b>DataSet</b> 外,还采用 <b>IEnumerable</b> 或 <b>ICollection</b>。可以通过将 <b>DataSet</b> 中包含的表的 <b>DefaultView</b> 属性分配给希望在 <b>DataSet</b> 中使用的表名来使用 <b>DataSet</b>。<b>DefaultView</b> 属性表示 <b>DataSet</b> 中表的当前状态,包括应用程序代码所做的任何更改(例如,行删除或值更改)。设置了 <b>DataSource</b> 属性后,调用 <code>DataBind()</code> 填充控件。

<p>
<Acme:TabControl runat="server">
<Tab Name="C#">
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
MyDataGrid.DataBind();
</Tab>

<Tab Name="VB">
MyDataGrid.DataSource=ds.Tables("Authors").DefaultView
MyDataGrid.DataBind()
</Tab>

<Tab Name="JScript">
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
MyDataGrid.DataBind();
</Tab>
</Acme:TabControl>

<p>
替换语法是同时指定 <b>DataSource</b> 和 <b>DataMember</b>。这种情况下,ASP.NET 自动为您获取 <b>DefaultView</b>。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -