-

数据源

一个 data sourse 控件与数据绑定的控件相互作用,并隐藏了复杂的数据的联编过程。这些是提供数据给 data bound 控件的工具,并且支持如插入,删除和更新操作的执行。

每一个 data sourse 控件包裹了一个特殊的数据提供者相关的数据库,XML 文件,或者是自定义类,并且帮助:

  • 管理连接
  • 选择数据
  • 管理像分页,缓存等的展示方面
  • 操控数据

有许多可在 ASP.NET 中获得的 data sourse 控件,为从 SQL 服务器,ODBC 或者 OLE DB 服务器,从 XML 文件,和从业务对象中获得数据。

基于数据类型,这些控件能被分为两个种类:

  • 分层的 data sourse 控件
  • 基于表格的 data sourse 控件

用于分层数据的 data sourse 控件是:

  • XMLDataSource - 它允许用或者不用模式信息绑定 XML 文件和字符串。
  • SiteMapDataSource - 它允许绑定一个提供站点地图信息的提供者。

用作表格数据的 data source 控件是:

Data source 控件描述
SqlDataSource它表示到返回 SQL 数据的 ADO.NET data provider 的连接,包括通过 OLEDB 和 QDBC 可获得的 data sources。
ObjectDataSource它允许绑定一个返回数据的自定义的 .Net business 对象
LinqdataSource它允许绑定 Linq-t0-SQL 查询的结果。(仅由 ASP.NET 3.5 支持)
AccessDataSource它表示到 Microsoft Access 数据库的连接。

Data Source 视图

Data source 视图是 DataSourceView 类的对象,它代表一个自定义的为不同数据操作如排序,过滤等而设计的数据视图。

DataSourceView 类作为所有 data source 视图类的基本类而使用,它定义了 data source 控件的性能。

以下表格提供了 DataSourceView 类的属性:

属性描述
CanDelete表示是否允许删除潜在的 data source。
CanInsert表示是否允许插入潜在的 data source。
CanPage表示是否允许给潜在的 data source 分页。
CanRetrieveTotalRowCount表示总的行信息能否获得。
CanSort表示数据是否能排序。
CanUpdate表示是否允许在潜在的 data source 上更新。
Events获得 data source 视图代表的事件句柄的列表。
Name视图的名字。

以下的表格提供了 DataSourceView 类的方法:

方法描述
CanExecute确定指定的命令是否能执行。
ExecuteCommand执行指定的命令。
ExecuteDelete在 DataSourceView 对象所表示的数据列表上执行一个删除操作。
ExecuteInsert在 DataSourceView 对象所表示的数据列表上执行一个插入操作。
ExecuteSelect从潜在的数据存储中获取数据列表。
ExecuteUpdate在 DataSourceView 对象所表示的数据列表上执行一个更新操作。
Delete在和视图所联系的数据上执行一个删除操作。
Insert在和视图所联系的数据上执行一个插入操作。
Select返回被查询的数据。
Update在和视图所联系的数据上执行一个更新操作。
OnDataSourceViewChanged提出 DataSourceViewChanged 事件。
RaiseUnsupportedCapabilitiesError由 RaiseUnsupportedCapabilitiesError 方法调用来将 ExecuteSelect 操作所需要的能力和视图所支持的能力相比较。

SqlDataSource 控件

SqlDataSource 控件代表到相关数据库比如 SQL Server 或者 Oracle数据库,或者通过 OLEDB 或 Open Database Connectivity(ODBC) 的可存取数据的连接。数据连接通过两个重要的属性 ConnectionString 和 ProviderName 完成。

以下的代码片段提供了控件的基本语法:

<asp:SqlDataSource runat="server" ID="MySqlSource"
   ProviderName='<%$ ConnectionStrings:LocalNWind.ProviderName  %>'
   ConnectionString='<%$ ConnectionStrings:LocalNWind %>'
   SelectionCommand= "SELECT * FROM EMPLOYEES" />

<asp:GridView ID="GridView1" runat="server" DataSourceID="MySqlSource" />

在潜在的数据上配置不同的数据操作依赖于 data source 控件的不同属性(属性集)。

以下的表格提供了相关的 SqlDataSource 控件的属性集,它提供了控件的编程接口:

属性组描述
DeleteCommand,
DeleteParameters,
DeleteCommandType
获取或设置 SQL 语句,参数和在潜在数据中删除行的类型。
FilterExpression,
FilterParameters
获取并设置数据过滤字符串和参数。
InsertCommand,
InsertParameters,
InsertCommandType
获取或设置 SQL 语句,参数和在潜在数据中插入行的类型。
SelectCommand,
SelectParameters,
SelectCommandType
获取或设置 SQL 语句,参数和在潜在数据中检索行的类型。
SortParameterName获取或设置一个输入参数的名字,它将被命令存储的过程用来给数据排序。
UpdateCommand,
UpdateParameters,
UpdateCommandType
获取或设置 SQL 语句,参数和在潜在数据中更新行的类型。

以下的代码片段展示了能被用来做数据操作的 data source 控件:

<asp:SqlDataSource runat="server" ID= "MySqlSource"
   ProviderName='<%$ ConnectionStrings:LocalNWind.ProviderName  %>'
   ConnectionString=' <%$ ConnectionStrings:LocalNWind %>'
   SelectCommand= "SELECT * FROM EMPLOYEES"
   UpdateCommand= "UPDATE EMPLOYEES SET LASTNAME=@lame"
   DeleteCommand= "DELETE FROM EMPLOYEES WHERE EMPLOYEEID=@eid"
   FilterExpression= "EMPLOYEEID > 10">
   .....
   .....
</asp:SqlDataSource>

ObjectDataSource 控件

ObjectDataSource 控件使 user-defined 类能让它们方法的输出和 data bound 控件相连接。这个类的编程接口几乎和 SqlDataSource 控件相同。

以下是绑定客户对象的两个重要方面:

  • 可绑定的类应该拥有一个默认的构造函数,它应该是无状态的,并且拥有能够映射到选择,更新,插入,和删除语意的方法。
  • 对象必须一次更新一个项目,批处理操作是不支持的。

让我们直接到一个例子中来使用这个控件。student 类是被用来和一个 data source 对象一起使用的类。这个类有三个属性:a student id,name,和 city。它有一个默认的构造函数和一个检索数据的 GetStudents 方法。

student 类:

public class Student
{
   public int StudentID { get; set; }
   public string Name { get; set; }
   public string City { get; set; }

   public Student()
   { }

   public DataSet GetStudents()
   {
      DataSet ds = new DataSet();
      DataTable dt = new DataTable("Students");

      dt.Columns.Add("StudentID", typeof(System.Int32));
      dt.Columns.Add("StudentName", typeof(System.String));
      dt.Columns.Add("StudentCity", typeof(System.String));
      dt.Rows.Add(new object[] { 1, "M. H. Kabir", "Calcutta" });
      dt.Rows.Add(new object[] { 2, "Ayan J. Sarkar", "Calcutta" });
      ds.Tables.Add(dt);

      return ds;
   }
}

采取以下的步骤来将对线绑定到一个 data source 对象和检索数据:

  • 创建一个新的网页。
  • 通过右击 Solution Explorer 的项目来给它添加一个类(Student.cs),添加一个类模板,将上面的代码放在里面。
  • 建立方法使得应用程序可以使用类的引用。
  • 在网页表单中放置一个 data source 控件对象。
  • 通过选择对象来配置 data source。

1

  • 给不同的数据操作选择数据方法。在这个例子中,仅有一个方法。

2

  • 在页面上放置一个 data bound 控件比如 grid view 并且选择 data source 对象作为潜在的 data source。

3

  • 在这个阶段,设计视图应该像以下这样:

4

  • 运行项目,它检索了 students 类中的硬编码的元祖。

5

AccessDataSource 控件

AccessDataSource 控件代表了到 Access 数据库的连接。它基于 SqlDataSource 控件并提供了更简单的编程接口。以下的代码片段提供了 data source 的基本语法:

<asp:AccessDataSource ID="AccessDataSource1 runat="server" 
   DataFile="~/App_Data/ASPDotNetStepByStep.mdb" SelectCommand="SELECT * FROM  [DotNetReferences]">
</asp:AccessDataSource>

AccessDataSource 控件打开了只读模式的数据库。但是,它也能被用来执行插入,更新或者删除操作。这以使用 ADO.NET 命令和参数集合来完成。

更新对于 ASP.NET 应用程序内的 Access 数据库来说是有问题的,这是因为 Access 数据库是一个纯文本并且默认的 ASP.NET 应用程序账户可能有写数据库文件的权限。