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

📄 webdataaccess.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
📖 第 1 页 / 共 4 页
字号:
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid13.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid13.src"
  Icon="/quickstart/aspplus/images/datagrid13.gif"
  Caption="VB DataGrid13.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid13.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid13.src"
  Icon="/quickstart/aspplus/images/datagrid13.gif"
  Caption="JScript DataGrid13.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>


<!--BEGIN SECTION--> <br> <a name="storedprocs"><br> <span class="subhead">编写和使用存储过程</span>
<p>
一般情况下,执行特殊查询是以牺牲性能为代价的。使用存储过程可以减少在应用程序中执行繁重的数据库操作的开销。存储过程易于创建,甚至可以通过 SQL 语句来实现。以下代码示例创建一个只返回表的存储过程。

<p>
<div class="code"><pre>
CREATE Procedure GetAuthors AS
    SELECT * FROM Authors
    return
GO
</pre></div>
<p>

可以创建同样接受参数的存储过程。例如:

<p>
<div class="code"><pre>
CREATE Procedure LoadPersonalizationSettings (@UserId varchar(50)) AS
    SELECT * FROM Personalization WHERE UserID=@UserId
    return
GO
</pre></div>
<p>

从 ASP.NET 页使用存储过程只是您迄今为止已经学习的 <b>SqlCommand</b> 对象知识的扩展。<b>CommandText</b> 只是存储过程的名称,而不是特殊查询文本。通过设置 <b>CommandType</b> 属性,向 <b>SqlCommand</b> 指出 <b>CommandText</b> 是存储过程。

<p><Acme:TabControl runat="server">
<Tab Name="C#">
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
</Tab>

<Tab Name="VB">
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure
</Tab>

<Tab Name="JScript">
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
</Tab>

</Acme:TabControl><p>

<p>
下面的示例说明如何调用存储过程以填充 <b>DataSet</b>。
<p>

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

<p>
将存储过程的参数作为特殊查询传递,如下面的示例所示。
<p>

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

<p>

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


<!--BEGIN SECTION--> <br> <a name="xmldata"><br> <span class="subhead">访问基于 XML 的数据</span>
<p>
在本节开始已经提到,<b>DataSet</b> 以独立于实际数据源的方式被设计为抽象数据。通过将示例的重点从 SQL 改为 XML,可以明白这一点。<b>DataSet</b> 支持将 <b>FileStream</b> 对象用作参数的 <b>ReadXml</b> 方法。在这种情况下读取的文件必须同时包含希望读取的架构和数据。<b>DataSet</b> 期望数据在窗体中,如下面的示例所示。

<p>
<div class="code"><pre>
&lt;DocumentElement&gt;
    &lt;TableName&gt;
        &lt;ColumnName1&gt;column value&lt;/ColumnName1&gt;
        &lt;ColumnName2&gt;column value&lt;/ColumnName2&gt;
        &lt;ColumnName3&gt;column value&lt;/ColumnName3&gt;
        &lt;ColumnName4&gt;column value&lt;/ColumnName4&gt;
    &lt;/TableName&gt;
    &lt;TableName&gt;
        &lt;ColumnName1&gt;column value&lt;/ColumnName1&gt;
        &lt;ColumnName2&gt;column value&lt;/ColumnName2&gt;
        &lt;ColumnName3&gt;column value&lt;/ColumnName3&gt;
        &lt;ColumnName4&gt;column value&lt;/ColumnName4&gt;
    &lt;/TableName&gt;
&lt;/DocumentElement&gt;
</pre></div>
<p>
每个 <b>TableName</b> 节与表中的一行相对应。下面的示例显示如何使用 <b>DataSet</b> 的 <b>ReadXml</b> 方法从 XML 文件读取架构和数据。注意,数据读入 <b>DataSet</b> 后,它和 SQL 数据无法区分&mdash;&mdash;<b>DataGrid</b> 同样绑定到它,如下面的示例所示。
<p>

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

<p>
也可以分别读取数据和架构,使用 <b>DataSet</b> 的 <b>ReadXmlData</b> 和 <b>ReadXmlSchema</b> 方法,如下面的示例所示。
<p>

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

<p>
正如 <b>DataSet</b> 对 XML 数据支持阅读器方法,它也支持写入数据。下面的示例实现从 SQL 选择数据并将结果写为 XML 数据或架构文本的工具。
<p>

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


<!--BEGIN SECTION--> <a name="endofsection">

<h4><a name="summary">本节小结</a></h4>
<ol>
<li>公共语言运行库的托管数据访问 API 抽象数据并用一致的方式表示它,与实际的数据源(SQL Server、OLEDB、XML 等)无关。
<li>为了使页能够访问执行 SQL 数据访问所需的类,必须将 <b>System.Data</b> 和 <b>System.Data.SqlClient</b> 命名空间导入到页中。
<li>从 SQL 查询填充数据集涉及创建 <b>SqlConnection</b>、将 <b>SqlDataAdapter</b> 对象与包含查询语句的连接关联和从命令填充数据集。
<li><b>DataGrid</b> 控件支持采用 <b>IEnumerable</b>(或 <b>ICollection</b>)类型的 <b>DataSource</b> 属性。通过分配 <b>DataSet</b> 的 <b>DefaultView</b> 属性(<b>DataView</b> 类型),可以将此设置为 SQL 查询的结果。
<li><b>SqlDataAdapter</b> 维护一个可用于用值替换变量标识符(由名称前的“@”表示)的 Parameters 集合。
<li>当执行不要求返回数据的命令(如插入、更新和删除)时,使用 <b>SqlCommand</b>,而不是 <b>SqlDataAdapter</b>。该命令通过调用 <b>ExecuteNonQuery</b> 方法发出,而该方法返回受影响的行数。
<li>使用 <b>SqlCommand</b> 时必须显式打开 <b>SqlConnection</b>(<b>SqlDataAdapter</b> 自动地为您处理打开连接)。始终记住在页完成执行前关闭与数据模型的 <b>SqlConnection</b>。如果没有关闭连接,则可能会在等待页实例被垃圾收集回收时不经意超过连接限制。
<li>为了允许对行进行编辑,<b>DataGrid</b> 支持整型 <b>EditItemIndex</b> 属性,该属性指示网格的哪一行应该是可编辑的。设置了该属性后,<b>DataGrid</b> 按该索引将行呈现为文本输入框,而不是简单的标签。
<li><b>DataGrid</b> 公开一个可设置为主键字段名的 <b>DataKeyField</b> 属性。在连到 <b>UpdateCommand</b> 的事件处理程序中,可以从 <b>DataGrid</b> 的 DataKeys 集合检索键名。
<li>使用 <b>DataGrid</b> 中的 <b>BoundColumn</b> 控件使您可以完全控制列的顺序,以及它们的 <b>ReadOnly</b> 属性。
<li>使用 <b>DataGrid</b> 中的 <b>TemplateColumn</b> 控件使您可以完全控制列的内容。
<li><b>ButtonColumn</b> 控件可用于在该列的每一行中仅呈现按钮控件,而该列可与事件关联。
<li><b>HyperLinkColumn</b> 可以添加到 <b>DataGrid</b> 的 Columns 集合,该集合支持在单击链接时定位到另一页。
<li>当 <b>DataGrid</b> 的 <b>AllowSorting</b> 属性设置为 <b>true</b> 时,它呈现将 <b>Sort</b> 命令激发回网格的列标头的超级链接。将 <b>DataGrid</b> 的 <b>OnSortCommand</b> 属性设置为当用户单击列链接时要调用的处理程序。
<li><b>DataSet</b> 支持将 <b>FileStream</b> 作为参数的 <b>ReadXml</b>、<b>ReadXmlData</b> 和 <b>ReadXmlSchema</b> 方法,而该参数可用于从 XML 文件填充 <b>DataSet</b>。
<li>使用存储过程可以减少在应用程序中执行繁重的数据库操作的开销。
</ol>
<p>

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

⌨️ 快捷键说明

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