最常使用的对象基本上有三种:连接、命令和数据集。
- 连接表示与某些数据存储区(如 sql server 或 xml 文件)的物理连接。
- 命令表示从数据存储区检索(选择)或对数据存储区进行操作(插入、更新、删除)的指令。
- 数据集表示应用程序使用的实际数据。注意,数据集总是同它们的源连接和数据模型断开并可独立
修改。不过,数据集的更改可以很容易与起始数据模型相协调。
使用数据集的好处是它为您提供了断开连接的数据库视图。可以在应用程序中操作数据集,然后在以后协
调更改和实际的数据库。对于长期运行的应用程序,这通常是最好的方法。对于 web 应用程序,通常对
每个请求执行短操作(一般只是显示数据)。通常不需要在一系列请求间保持 dataset 对象。对于这类
情况,可以使用 sqldatareader。
sqldatareader 对从 sql 数据库检索的数据提供仅向前的只读指针。若要使用 sqldatareader,请声明 sqlcommand 而不是 sqldataadapter。sqlcommand 公开返回 sqldatareader 的 executereader 方法。还请注意,当使用 sqlcommand 时,必须显式打开和关闭 sqlconnection。
重要说明:始终记住在页完成执行之前关闭与数据模型的连接。如果不关闭连接,则可能会在等待页实例被垃圾回收处理期间不经意地超过连接限制。
server=(local);中的local,这样设置可以避免由于服务器ip地址变更而造成网站不能访问
常用的数据库绑定代码
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, “作者”);
mydatagrid.datasource=ds.tables[“作者”].defaultview;
mydatagrid.databind();
当执行不要求返回数据的命令(如插入、更新和删除)时,也使用 sqlcommand。该命令通过调用 executenonquery 方法发出,而该方法返回受影响的行数
defaultview 属性表示 dataset 中表的当前状态,包括应用程序代码所做的任何更改(例如,行删除或值更改)。设置了 datasource 属性后,调用 databind() 填充控件。
mydatagrid.datasource=ds.tables["authors"].defaultview; mydatagrid.databind(); 与mydatagrid.datasource=ds; mydatagrid.datamember="authors"; mydatagrid.databind();等效 重要说明: 注意 datagrid 的 enableviewstate 属性已设置为 false。如果每个请 执行参数化选择代码
string selectcmd = "select * from authors where state = @state"; sqlconnection myconnection = new sqlconnection("server=(local) |
对任何网格的共同要求是能够将它包含的数据排序。虽然 datagrid 控件不为您显式排序它的数据,但它确实提供一种方法,在用户单击可用来排序数据的列标头时调用事件处理程序。当 datagrid 的 allowsorting 属性设置为 true 时,它呈现将 sort 命令激发回网格的列标头的超级链接。将 datagrid 的 onsortcommand 属性设置为当用户单击列链接时要调用的处理程序。列的名称作为 datagridsortcommandeventargs 参数上的 sortexpression 属性传递,该参数可用来设置绑定到网格的 dataview 的 sort 属性。下面的示例说明此过程。
<script> protected void mydatagrid_sort(object src, datagridsortcommandeven |
在本节开始已经提到,dataset 以独立于实际数据源的方式被设计为抽象数据。通过将示例的重点从 sql 改为 xml,可以明白这一点。dataset 支持将 filestream 对象用作参数的 readxml 方法。在这种情况
下读取的文件必须同时包含希望读取的架构和数据。
也可以分别读取数据和架构,使用 dataset 的 readxmldata 和 readxmlschema 方法
- 公共语言运行库的托管数据访问 api 抽象数据并用一致的方式表示它,与实际的数据源(sql server、oledb、xml 等)无关。
- 为了使页能够访问执行 sql 数据访问所需的类,必须将 system.data 和 system.data.sqlclient 命名空间导入到页中。
- 从 sql 查询填充数据集涉及创建 sqlconnection、将 sqldataadapter 对象与包含查询语句的连接关联和从命令填充数据集。
- datagrid 控件支持采用 ienumerable(或 icollection)类型的 datasource 属性。通过分配 dataset 的 defaultview 属性(dataview 类型),可以将此设置为 sql 查询的结果。
- sqldataadapter 维护一个可用于用值替换变量标识符(由名称前的“@”表示)的 parameters
集合。 - 当执行不要求返回数据的命令(如插入、更新和删除)时,使用 sqlcommand,而不是 sqldataadapter。该命令通过调用 executenonquery 方法发出,而该方法返回受影响的行数。
- 使用 sqlcommand 时必须显式打开 sqlconnection(sqldataadapter 自动地为您处理打开连接)。始终记住在页完成执行前关闭与数据模型的 sqlconnection。如果没有关闭连接,则可能会在等待页实例被垃圾收集回收时不经意超过连接限制。
- 为了允许对行进行编辑,datagrid 支持整型 edititemindex 属性,该属性指示网格的哪一行应该
是可编辑的。设置了该属性后,datagrid 按该索引将行呈现为文本输入框,而不是简单的标签。 - datagrid 公开一个可设置为主键字段名的 datakeyfield 属性。在连到 updatecommand 的事件
处理程序中,可以从 datagrid 的 datakeys 集合检索键名。 - 使用 datagrid 中的 boundcolumn 控件使您可以完全控制列的顺序,以及它们的 readonly 属性。
- 使用 datagrid 中的 templatecolumn 控件使您可以完全控制列的内容。
- buttoncolumn 控件可用于在该列的每一行中仅呈现按钮控件,而该列可与事件关联。
- hyperlinkcolumn 可以添加到 datagrid 的 columns 集合,该集合支持在单击链接时定位到另一页。
- 当 datagrid 的 allowsorting 属性设置为 true 时,它呈现将 sort 命令激发回网格的列标头的
超级链接。将 datagrid 的 onsortcommand 属性设置为当用户单击列链接时要调用的处理程序。 - dataset 支持将 filestream 作为参数的 readxml、readxmldata 和 readxmlschema 方法,而该参数可用于从 xml 文件填充 dataset。
- 使用存储过程可以减少在应用程序中执行繁重的数据库操作的开销。
datalist 和 repeater 也支持 datasource 属性,该属性(datasource)可设置为任何 icollection、ienumerable 或 ilistsource 类型