1.使用SqlDataSource数据源控件
(1)SqlDataSource数据源控件工作原理
图3-3说明了SqlDataSource数据源控件操作数据库的过程。
SqlDataSource控件具有SelectCommand、UpdateCommand、InsertCommand和DeleteCommand属性,分别用于设置查询、更新、插入和删除等SQL命令。当GridView、DetailsView等绑定到SqlDataSource数据源控件后,SqlDataSource会根据事先设置好的连接属性自动与数据库建立连接,执行SQL数据查询命令,并在数据绑定控件中显示数据,并能感知用户在数据绑定控件上的更新、插入和删除等操作,分别执行相应的SQL命令,完成数据库数据的更新、插入和删除。
图3-3 SqlDataSource数据源控件操作数据库的过程示意图
不难理解,使用SqlDataSource数据源控件操作数据库,读者需要做的是建立其与数据库的连接(通过设置其连接数据库属性实现),并且设置SqlDataSource控件的SelectCommand、UpdateCommand、InsertCommand和DeleteCommand等操作数据库属性。
(2)SqlDataSource数据源控件连接数据库属性
SqlDataSource数据源控件连接数据库属性包括数据源名称和连接字符串两个具体属性。前者说明将连接什么类型的数据源,后者指示数据源控件怎么连接数据源。
1)数据源名称。
SqlDataSource数据源控件可以操作SQL Server及任何OLE DB或ODBC数据源,但是必须事先指定相应的数据源名称。常见数据库对应的数据源名称如表3-1所示。
表3-1 常见数据库对应的数据源名称一览表
2)连接字符串。
操作不同的数据源对应的连接字符串也不同,此处仅以SQL Server数据库为例介绍连接字符串,其他数据源连接字符串请读者自己查看相关资料。
SQL Server数据库有SQL Server身份验证方式和集成Windows身份验证方式,导致连接字符串相应的有所不同。
①SQL Server身份验证。该验证方式即为SQL Server使用自身的身份验证机制验证用户身份,连接到数据库必须提交登录到SQL Server的合法账号和密码,此时连接字符串格式如下:
②Windows身份验证。该验证方式即为SQL Server信任来自Windows的安全凭证。如果使用的是IIS5.0,Web应用程序默认情况下使用名为ASPNET的账号访问SQL Server;若使用的是IIS6.0,则应用程序默认情况下使用Network Service访问SQL Server。可以在SQL Server数据库中事先设置上述用户的相关权限,因此连接字符串不需要再指定账号和密码了,相应的连接字符串格式如下:
其中:Integrated Security设置是否集成Windows身份验证,默认值为False。
ASP.NET还提供了直接访问SQL Server数据库文件的数据库连接方式,其格式如下:
其中:
●.\SQLEXPRESS等价于LOCALHOST\SQLEXPRESS。
●User Instance用于设置非管理员对以自己账户运行的实例(称作用户实例)是否具有数据库所有者特权。用户实例是随SQL Server 2005 Express引入的,此项适合SQL Server2005 Express或者SQL Server 2008 Express,且其值应取True。
●|DataDirectory|表示受ASP.NET站点保护的App_Data目录。
(3)SqlDataSource数据源控件操作数据库属性
SqlDataSource数据源控件操作数据库属性如下:
●SelectCommand 设置从数据库返回数据的SQL-SELECT语句或存储过程
●UpdateCommand 设置更新数据库中数据的SQL-UPDATE语句或存储过程
●InsertCommand 设置插入数据到数据库的SQL-INSERT语句或存储过程
●DeleteCommand 设置删除数据库中数据的SQL-DELETE语句或存储过程
下面是设置SqlDataSource数据源控件操作数据库属性的一个示例。
(4)使用向导设置SqlDataSource数据源控件相关属性
Visual Studio.NET提供了SqlDataSource数据源控件的数据源配置向导工具,使得设置与使用SqlDataSource数据源控件非常方便,主要步骤如下:
1)配置SqlDataSource连接属性。
①创建数据库连接。
单击SqlDataSource数据源控件右上角的标记,执行智能菜单“配置数据源…”命令,弹出“配置数据源—选择您的数据连接”对话框,接着在对话框中单击“新建连接…”按钮,弹出如图3-4所示的“添加连接”对话框。左侧为连接到已置于SQL Server数据库管理系统中某数据库的设置对话框,右侧为连接到独立的SQL Server数据库文件的设置对话框。
按如图3-4提示,“更改…”数据源并选择“SQL Server”,接着可以依次设置服务器名称、数据库名称和用户验证方式等数据库连接相关要素,然后单击“确定”按钮,回到“配置数据源—选择您的数据连接”对话框,创建了一个到已置于SQL Server数据库管理系统中某数据库的连接。
也可以“更改…”数据源并选择“SQL Server数据库文件”,接着依次“浏览…”定位到目标数据库、选择验证方式,然后单击“确定”按钮,回到“配置数据源—选择您的数据连接”对话框,创建一个到独立的SQL Server数据库文件的连接。
图3-4 设置SqlDataSource数据源控件连接数据库属性
②将连接字符串保存到应用程序配置文件。
继续上述“配置数据源—选择您的数据连接”对话框,单击“下一步”按钮,弹出“配置数据源—将连接字符串保存到应用程序配置文件”对话框。在对话框中选取“是”,并将其以合适的名称保存到应用程序配置文件(注意:将连接字符串保存到应用程序配置文件以后,如果需以相同的连接方式连接到相同的数据库,就不需要新建连接了,只要在“配置数据源—选择您的数据连接”对话框中“应用程序连接数据库应使用哪个数据连接?”下拉列表中选取上述已保存到程序配置文件的连接名称即可)。
2)设置SqlDataSource操作数据库属性。
在上述“配置数据源—将连接字符串保存到应用程序配置文件”对话框中继续单击“下一步”,进入“配置数据源—配置Select语句”对话框。由于此对话框仅仅能设置SelectCommand属性,如果需要设置SqlDataSource数据源控件所有的操作数据库属性,则需选择其中“指定自定义SQL语句或存储过程”单选按钮并单击“下一步”按钮,进入如图3-5所示的“配置数据源—定义自定义SQL语句或存储过程”对话框,然后在对话框中分别选择“SELECT”、“UPDATE”、“INSERT”和“DELETE”选项卡,在相应的“SQL语句”文本框中分别输入SQL-SELECT、SQL-UPDATE、SQL-INSERT和SQL-DELETE语句,即可分别设置SqlDataSource数据源控件的SelectCommand、UpdateCommand、InsertCommand和DeleteCommand属性。
2.绑定数据绑定控件到数据源控件
在ASP.NET中,通常情况下,数据源控件从数据库获得的数据需要通过数据绑定控件来显示。依绑定的数据绑定控件不同,数据源控件还能够“感知”用户施加在数据绑定控件的插入、删除和更新等操作,向数据库发出的插入、删除和更新等命令。前提是要将这些数据绑定控件绑定到数据源控件(也可以表述为将数据源控件绑定到数据绑定控件)。
数据绑定控件可分为列表类、表格类和表单类,其中表格类和表单类数据绑定控件绑定到数据源控件的方法是一样的。
图3-5 自定义SQL语句或存储过程设置SqlDataSource的操作数据库属性
(1)绑定到列表式数据绑定控件
列表式数据绑定控件有DropDownList、RadioBottonList和CheckBoxList控件,只要在设计期间将数据绑定控件的DataSource属性设置为要绑定的数据源控件名称,并将数据绑定控件的DataTextField和DataValueField分别指定为数据源控件返回的某数据字段,那么页面运行时,数据绑定控件将自动绑定到数据源控件,随之自动设置好该列表式数据绑定控件的列表项目名称及其选定值。
以DropDownList为例,将列表式数据绑定控件绑定到数据源控件的设置方法为首先执行该数据绑定控件智能菜单的“选择数据源…”命令,弹出如图3-6所示的“数据源配置向导”对话框,接着在对话框中按顺序完成如下操作:
1)在“选择数据源”下拉列表中选择该列表式数据绑定控件将要绑定的数据源控件。
2)在“选择要在DropDownList中显示的数据字段”下拉列表中选择将要在该数据绑定控件中显示的列表项目绑定的数据字段。
3)在“为DropDownList的值选择数据字段”下拉列表中选择该数据绑定控件选择值绑定的数据字段。
图3-6 列表式数据绑定控件数据源配置对话框
(2)绑定到表格式或表单式数据绑定控件
在设计期间,将表格式或表单式数据绑定控件的DataSource属性设置为要绑定的数据源控件名称,即绑定到数据源控件。
绑定到表格式或表单式数据绑定控件设置方法很简单,只要在控件智能菜单的“选择数据源”下拉列表中选择将要绑定的数据源控件名称即可。
3.使用GridView操作数据库
GridView控件的基本功能是以表格形式显示绑定的数据源控件返回的数据,并通过绑定的数据源控件实现数据的删除和修改(注意:GridView没有提供数据插入的功能)。下面介绍GridView控件常见的使用技术。
(1)设置GridView控件数据列
当在设计期间设定好GridView控件的DataSource属性后,GridView控件将显示数据源控件返回的所有数据列。可以有选择地显示特定的数据列,还可以设置数据列的显示样式。
设置GridView控件数据列的基本方法如下:执行GridView控件的智能菜单“编辑列…”命令,弹出如图3-7所示“字段”对话框,在对话框中可以添加、删除数据列字段,修改数据列字段的属性,还可以调整数据列字段的显示顺序。
常用的GridView数据列字段主要有BoundField、ImageField和HyperLinkField等,由于其作用不同,相关属性也随之不同。
1)BoundField字段。
BoundField字段分别以文本的方式显示和编辑绑定的字段。表3-2所示的是几个常见的属性。
图3-7 设置GridView控件数据列
2)ImageField字段。
ImageField字段用于显示图片的数据列。通常情况下,将图片文件保存在站点的某个目录下,并且将图片文件的URL地址保存在数据表某个字段中。可以将该数据表保存图片URL地址的字段绑定到ImageField字段的DataImageUrlField属性,在GridView中实现一个图片数据列。
表3-2 GridView控件BoundField字段常见属性说明
3)HyperLinkField字段。
HyperLinkField字段用于显示链接的数据列。通常情况下,将链接文字和链接的URL地址分别保存在数据表的两个字段中。可以将这两个链接文字和链接的URL地址的字段分别绑定到HyperLinkField字段的DataTextField和DataNavigateUrlFields属性,实现在GridView中显示HyperLink链接的数据列。
(2)在GridView控件中设置命令按钮
在GridView控件中接收用户数据编辑、更新和删除命令并向数据源控件发送这些命令非常简单,不需要编写任何程序代码,只要在控件中加入“编辑、更新和取消”、“删除”和“选择”CommandField字段即可。
1)“编辑、更新、取消”字段是一组按钮。GridView具有Item视图和EditItem视图。Item视图用于显示绑定的数据列,EditItem视图用于编辑数据列中的数据。当加入“编辑、更新、取消”字段,则将在Item视图中出现“编辑”按钮,在EditItem视图中出现“更新”和“取消”按钮。单击“编辑”按钮GridView当前行即切换到EditItem视图,单击“取消”按钮则返回到Item视图;而“更新”按钮则自动向绑定的数据源控件发布更新命令,并由数据源控件执行其UpdateCommand中设置的SQL-UPDATE语句或存储过程,实现数据更新后又返回到Item视图。
2)“删除”按钮显示在Item视图,其可自动执行绑定的数据源控件DeleteCommand属性中设置的SQL-DELETE语句或存储过程,实现当前记录的删除。
3)“选择”按钮的作用是设置按钮所在的行为当前行。与DropDownList一样,GridView也有SelectedValue属性用于读取当前行的选定值。SelectedValue属性值为GridView当前行由DataKeyNames属性指定的字段的值。
在GridView控件中设置命令按钮的方法如下:
1)首先执行GridView控件的智能菜单的“编辑列…”命令,在弹出的“字段”对话框中,展开“可用字段”列表中的“CommandField”项,然后加入相应的按钮字段。
2)接着设置CommandField字段属性。主要属性如表3-3所示。
表3-3 GridView控件CommandField字段常见属性说明(www.xing528.com)
(3)使用GridView控件删除或修改数据记录
1)使用GridView控件修改数据记录。
使用GridView控件修改数据记录分两步进行:
①首先在GridView控件中加入“编辑、更新、取消”字段。
②接着设置“更新”按钮执行的SQL-UPDATE语句。操作方法为执行GridView控件绑定的SqlDataSource数据源控件的智能菜单的“配置数据源”命令,按照向导进入前面已讲到的“配置数据源—定义自定义SQL语句或存储过程”对话框,在“UPDATE”选项卡的“SQL语句”文本框中设置UpdateCommand属性对应的SQL-UPDATET语句。
2)使用GridView控件删除数据记录。
使用GridView控件删除数据记录方法和修改数据记录方法类似,不再赘述。
(4)传递参数到绑定的数据源控件
在GridView控件UpdateCommand和DeleteCommand属性中的SQL-UPDATE语句和SQL-DELETE语句一般都需要接受参数的传递。
1)传递GridView控件当前行的唯一标识传递到绑定的数据源控件。
单击GridView控件数据“更新”按钮和“删除”按钮,一般应该是操作GridView的当前行对应的数据记录,因此需要将GridView控件当前行唯一标识字段的值,传递给其绑定的数据源控件的UpdateCommand或DeleteCommand命令中SQL语句的唯一标识当前行的参数,以实现当前行的修改或删除,操作步骤如下:
①首先将GridView控件DataKeyNames属性指定为绑定数据表的当前行唯一标识字段,通常指定为主键字段。
②接着传递GridView的唯一标识字段传递到数据源控件的UpdateCommand和Delete Command属性中的SQL-UPDATE语句和SQL-DELETE语句。
这个步骤的设置方法为首先选取GridView绑定的SqlDataSource数据源控件,然后执行其智能菜单“配置数据源…”命令,按照向导进入前面已讲到的“配置数据源—定义自定义SQL语句或存储过程”对话框,分别在“UPDATE”和“DELETE”选项卡的“SQL语句”文本框中设置UpdateCommand和DeleteCommand属性值对应的SQL-UPDATE语句和SQL-DELETE语句,格式如下:
DeleteCommand属性中SQL-DELETE语句:
UpdateCommand中SQL-UPDATE语句:
2)传递当前行可编辑数据列中数据到数据源控件的UpdateCommand属性
单击GridView控件“更新”按钮时,除了能够将其当前行的唯一标识传给其绑定的数据源控件的UpdateCommand中的SQL-UPDATE语句的WHERE子句外,还能够将EditItem视图所有可编辑数据列的文本框内容传给UpdateCommand中的SQL-UPDATE语句对应字段。操作方法是在上述“配置数据源—定义自定义SQL语句或存储过程”对话框的“UPDATE”选项卡中,在“SQL语句”文本框中按如下格式完善上述SQL-UPDATE语句:
(5)分页显示
GridView控件实现数据分页显示相关属性及设置如表3-4所示。
表3-4 GridView控件实现数据分页显示相关属性及设置
注意:如果要GridView控件实现数据分页显示,其绑定的数据源控件的DataSourceMode属性必须设置为DataSet。
4.使用DetailsView操作数据库
DetailsView控件的基本功能是:以记录单的形式显示绑定的数据源控件返回数据的一条记录,同时,能够通过绑定的数据源控件实现该数据记录的删除和修改,并且还可以在数据表中追加新的数据记录
有必要强调一下,GridView控件不具备添加数据的功能,而DetailsView控件不具备选择当前行的功能,但是具有添加记录数据的能力。
(1)设置DetailsView控件的数据源和数据字段
与GridView控件一样,可以设置DataSource属性绑定到数据源控件,还可以执行DetailsView控件的智能菜单“编辑字段…”命令,在DetailsView控件中有选择地显示特定的数据字段,并设置数据字段的显示样式。
(2)向数据源控件发布的数据新建、插入、编辑、更新和删除命令
类似于GridView,执行DetailsView控件的智能菜单“编辑字段…”命令,在DetailsView控件中插入“编辑、更新、取消”、“删除”和“新建、插入、取消”按钮。
DetailsView控件具有Item视图、EditItem和InsertItem视图。“编辑”和“新建”按钮将出现在Item视图,“更新、取消”按钮将显示到EditItem视图,而“插入、取消”按钮将加入到InsertItem视图。
(3)使用DetailsView控件添加数据记录
使用DetailsView控件添加数据记录方法如下:
1)首先在DetailsView控件加入“新建”、“插入”、“取消”按钮。
2)接着设置“插入”按钮执行的SQL-INSERT语句。操作方法为执行DetailsView控件绑定的SqlDataSource数据源控件的智能菜单的“配置数据源”命令,按照向导进入前面已讲到的“配置数据源—定义自定义SQL语句或存储过程”对话框,在“INSERT”选项卡中“SQL语句”文本框中设置InsetCommand属性值对应的SQL-INSERT语句。
SQL-INSERT语句格式如下:
(4)使用DetailsView控件删除或修改数据记录
和使用GridView控件删除或修改数据记录方法类似,在此不再赘述。
(5)传递参数到绑定的数据源控件
和GridView控件一样,当在DetailsView控件中单击“更新”、“删除”或“插入”按钮时,绑定的数据源控件UpdateCommand、DeleteCommand或InsertCommand属性中的SQL-UPDATE语句、SQL-DELETE语句或SQL-INSERT语句一般都需要接收参数的传递。DetailsView传递参数到绑定的数据源控件的设置方法与GridView类似,具体请参照GridView控件的传递参数到绑定的数据源控件相关内容。
(6)通过分页显示多条记录
DetailsView控件同时在页面上只能显示一条记录,但是可以通过设置分页方式逐页显示数据集中每一条记录,以显示多条记录。具体设置参照GridView控件的分页设置。
(7)设置起始视图
可以通过DetailsView的DefaultMode属性设置控件的起始视图。DefaultMode属性默认值为ReadOnly,表示DetailsView默认情况下起始视图为Item视图,可以将DefaultMode属性设置为Edit或Insert,设置DetailsView起始视图为EditItem视图或InsetItem视图。
5.通过主/明细界面操作数据库
主/明细界面主要有两种典型形式。
1)分类筛选界面:有两个数据绑定控件,一个显示分类信息,另一个显示当前类别相关数据;
2)摘要/明细界面:同样是两个数据绑定控件,一个显示主要信息,当选定某一条目时,另一个数据绑定控件则显示该条目的详细信息。
为了便于说明,下面将以数据库名为Students的两个数据表Class和Student载体,分别说明上述两种典型主/明细界面。Students的数据表Class和Student描述如下:
(1)分类筛选界面
下面将Class表绑定到DropDownList控件,将Student表绑定到GridView控件,选定DropDownList控件中某个班级,GridView控件随之显示该班级学生记录。
1)建立操作Class数据表的数据源控件。
在页面中加入一个SqlDataSource控件,将其控件名改为sqlClass,同时将sqlClass的数据库连接属性和数据库操作属性设置如下:
①连接字符串。
②SelectCommand属性。
2)绑定DropDownList控件到数据源控件sqlClass。
①在页面中适当位置加入一个DropDownList控件,将其控件名改为dropClass。
②执行DropDownList控件dropClass的智能菜单命令“选择数据源…”,在“数据源配置向导”对话框中选择DropDownList数据源sqlClass、显示字段为ClassName和选择值字段为ClassID。
3)建立操作Student数据表的SqlDataSource数据源控件sqlStu。
在页面加入一个SqlDataSource控件,将其控件名改为sqlStu,同时将sqlStu的数据库连接属性和数据库操作属性设置如下:
①连接字符串。
②SelectCommand属性。
由于仅仅要求通过DropDownList控件显示Class表内容,因此只要设置SelectCommand属性即可,属性值如下:
③从DropDownList控件dropClass中读取SelectValue到@ClassID参数。
由于SelectCommand属性是带有参数的查询,所以数据源控件sqlStu“配置数据源”向导会出现如图3-8所示的“配置数据源—定义参数”对话框。由于@ClassID参数来自控件DropDownList的SelectValue,所以在“参数源”下拉列表中选取“Control”,在ControlID中选取上述DropDownList控件dropClass,之后按向导完成后续操作。
图3-8 数据源控件SelectCommand属性中SELECT语句参数定义
4)绑定GridView控件到SqlDataSource数据源控件sqlStu。
在页面Drop_Grid.aspx中适当位置加入一个GridView控件,将其控件名改为gridStu,然后执行gridStu智能菜单的“选择数据源”下拉列表中选择SqlDataSource数据源控件sqlStu。
到此,一个典型的分类筛选操作数据库界面的ASP.NET页面设计完成。
(2)摘要/明细界面
下面通过名为gridStu的GridView控件与名为dtailStu的DetailsView控件联动说明摘要/明细界面。将GridView控件与DetailsView控件均绑定到Student数据表,GridView控件仅显示StuID和Name字段,选取GridView控件某一行时,再通过DetailsView控件显示该行对应数据记录的详细信息,并且在DetailsView控件中可删除当前记录。
不难看出摘要/明细界面和分类筛选界面类似,所不同的是:分类筛选界面的两个数据绑定控件分别操作的是两个数据表,而摘要/明细界面的两个数据绑定控件操作的均是同一个数据表。需特别说明如下:
1)与DropDownList控件不同的是,DropDownList控件SelectedValue属性是明确的,而GridView控件须事先将其DataKeyNames设置为主键字段,才可以将GridView控件的SelectedValue属性传递到数据源控件的SelectCommand中的SQL语句参数。
2)用同一个数据绑定控件进行插入、删除和修改操作时,该数据绑定控件会自动重新绑定。因此,上述操作完成后数据绑定控件的显示内容会自动刷新。然而,如果两个数据绑定控件同时绑定一个数据表,一个数据绑定控件插入、删除和修改操作后,另一个数据绑定控件的显示内容不会自动刷新,需要引发插入、删除和修改操作的数据绑定控件的相关事件,在事件函数中编写程序对另一个数据绑定控件进行人为绑定。
上述代码是名为dtailStu的DetailsView控件的ItemInserted事件,将名为gridStu的GridView控件重新绑定到数据源,使得GridView控件能够及时显示通过DetailsView控件添加到数据源中新的数据记录。所有的数据绑定控件均有DataBind()方法,它的作用是将数据绑定控件绑定到其DataSource属性指定的数据源。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。