ASP.NET 笔记
时间 :2003 年 1 月 14 日
主题 : DataGrid 控件的 再开发
一、问题提出
1 、 Microsoft 教程中 DataGrid 控件与 DataSet 配合存在的问题
Micorsoft 的 QuickStart 教程中使用 DataGrid 与 DataSet 配合来显示数据。它的示例可以非常方便的使用 VS 向导来加以实现,只需写少量的代码。但在效率上存在以下问题:
· DataGrid 控件的 每次显示都要进行 DataBind ,而每次 DataBind 都要重新读入数据库中当前使用表的所有需要数据到 DataSet 中。这在实际使用中几乎是不可以被接受的。
·示例中没有充分使用 VS 这样的工具,其 aspx 文件中连接字符串不可共享。事实上,我们常常要在自己的机器上进行文件调试。然后把文件上传到服务器上,此时,数据库的 XXXConnection 字符串经常要进行相应的修改,而这样的字符串又分布在不同的文件的不同地方,修改让人提心吊胆(怕有遗漏)。事实上,大多数都是使用的相同的数据库,即相同连接。
2 、 DataSet 的尴尬
Microsoft 定下 DataSet 的目的到底是什么?现在的我有点迷惑:
作为初学者,我觉得 DataSet 真是个好东西。当时我仅花了两行代码加 Vs 向导就用 DataGrid 显示出了所有的表中的内容;这一切使得用为 DataSet 就这样简单。
然而,我很快乐不起来了。 DataSet 在默认下一次把所有的相关内容全装入到内存中,而不是只装入需要显示的内容。 MS 的文档说 DataSet 适用于需要反复进行临时修改的数据,但我还是很迷惑:因为, DataSet 不是公用的。换句话说,每个用户都会有它的 DataSet ,这样的 DataSet 一般不是一个,因为 ViewState 中不保存 DataSet ,所以每次进行 PostBack 之前,它一般应当进行 Cache 或 Session ,这样,服务器的内存就有两份 DataSet 。假定每个 DataSet 占 1M( 很小的表 ) ,那么 100 个用户就让你的服务器吃不消。
但, DataSet 的确比较方便!性能与方便,鱼与熊掌。
二、解决思路
1 、自定义读入 DataSet 数据与 DataGrid 的相关内容。由于 DataGrid 不能与 DataSet 进行直接处理,所以翻页操作等相关内容必须要进行重写。
2 、使用 Web.Config 进行连接字符串共享。 DataAdapter 向导的好处是方便,但它不能直接使用 web.config 中的内容,所以,只得手动写相应的代码。可惜 可惜 !不过,向导的代码实在是太 长太 多,手写简单一点也算好。 L
3 、用 DataSet 还是 DataReader ?
实在是犹豫了很久。不少相关示例都用的是 DataReader ,但我这人懒,一切想简单。于是,我还是选择了 DataSet ,只是只装入很必要(显示)的内容。显示了后就 release 它,所以应当不占内存。
三、目标:
四、过程
1、 使用 Web.config
(1) 在 Web.config 中加入:
< appSettings >
1<add key=" ConnectionString " value="data source=TMS\ NETSDK ;initial catalog= Northwind;integrated security= SSPI;persist security info= False;workstation id= TMS;packet size=4096"></add>
(2) 在 Vb 代码中如下方式使用:
cnn = New SqlConnection ( ConfigurationSettings.AppSettings ().Item(" ConnectionString "))
' 上面的语句等价于 cnn = New SqlConnection ("data source= TMS; initial catalog= MyGuest;integrated security= SSPI;persist security info= False;workstation id= TMS;packet size=4096"
da = New SqlDataAdapter ("select employeeid,lastname,firstname,city from employees", cnn )
da.Fill ( ds , "employees")
(3) 说明:
·关于 security= sspi 的解释
集成安全性 -或-
Trusted_Connection
|
'false'
|
该连接是否为安全的连接。可识别的值有 “true”、“false”和“ sspi ”,后者等效于“true”。
---|---|---
·关于 persist security info=False 的解释:
如果“持续安全信息”值设置为 false (默认),则返回的连接字符串与用户设置的 ConnectionString 相同但去除了安全信息。 除非将 “持续安全信息”设置为 true ,否则 SQL Server .NET 数据提供程序 不 持续或返回连接字符串中的密码。
****** 以上解释有点不是很清楚
·关于 WorkStation id 的解释
用户 ID
|
|
SQL Server 登录 帐户 。
---|---|---
工作站 ID
|
本地计算机名称
|
连接到 SQL Server 的工作站的名称。
·关于 ConfigurationSettings 的说明:
提供对指定配置节中的配置设置的访问 , 无法继承。
公共属性
AppSettings
|
获取 < appSettings > 元素配置节中的配置设置。
---|---
公共方法
GetConfig
|
返回用户定义的配置节的配置设置。
---|---