61使用SQL Cache DependenciesWord文件下载.docx

上传人:b****6 文档编号:21013941 上传时间:2023-01-26 格式:DOCX 页数:20 大小:718.18KB
下载 相关 举报
61使用SQL Cache DependenciesWord文件下载.docx_第1页
第1页 / 共20页
61使用SQL Cache DependenciesWord文件下载.docx_第2页
第2页 / 共20页
61使用SQL Cache DependenciesWord文件下载.docx_第3页
第3页 / 共20页
61使用SQL Cache DependenciesWord文件下载.docx_第4页
第4页 / 共20页
61使用SQL Cache DependenciesWord文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

61使用SQL Cache DependenciesWord文件下载.docx

《61使用SQL Cache DependenciesWord文件下载.docx》由会员分享,可在线阅读,更多相关《61使用SQL Cache DependenciesWord文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

61使用SQL Cache DependenciesWord文件下载.docx

该表有3列:

tableName,notificationCreated,和changeId.对于哪些在web应用程序的SQLcachedependency里要用到的表,该表都有一条记录与之对应。

tableName就是具体某个表的名称;

notificationCreated指明了添加记录时的date和time;

而列changeId的类型是int,初始值是0,每当对应的表发生一次改动,其值就自动增加一次。

除了表AspNet_SqlCacheTablesForChangeNotification外,数据库还需要为出现在SQLcachedependency里的每个表包含一个触发器(triggers),任何时候,只要表插入、更新、删除一条记录或在表AspNet_SqlCacheTablesForChangeNotification里的对应的changeId值增大的情况下就会执行触发器。

当使用SqlCacheDependency对象(object)来缓存数据时,ASP.NET将关注某个表的当前(current)的changeId值,一旦发现当前其值与数据库里面的changeId值不同时,就将该SqlCacheDependency对象清除。

因为,changeId不吻合就意味着在完成数据缓存后,表又发生过改动。

第一步:

考察命令行程序aspnet_regsql.exe

如上所述,使用polling方法时,必须对数据库进行设置以包含这些基础构造:

一个预先定义的表(AspNet_SqlCacheTablesForChangeNotification),一些存储过程,以及基于在SQLcachedependencies里要用到的表的触发器。

诸如这些表、存储过程、触发器等都可以通过命令行程序aspnet_regsql.exe来创建,该命令位于$WINDOWS$/Microsoft.NET/Framework/version文件夹。

要创建表AspNet_SqlCacheTablesForChangeNotification以及相关的存储过程,可以在命令行这样运行:

/*ForSQLServerauthentication...*/

aspnet_regsql.exe-Sserver-Uuser-Ppassword-ddatabase-ed

/*ForWindowsAuthentication...*/

aspnet_regsql.exe-Sserver-E-ddatabase-ed

注意:

要运行这些命令,必须以db_securityadmin和db_ddladmin的身份登录数据库,更多详情请参阅作者博客:

比如:

在Windows身份认证模式下,对某个数据库服务器ScottsServer里的数据库pubs添加基础构造时,在命令行键入:

aspnet_regsql.exe-SScottsServer-E-dpubs-ed

完成了数据库级(database-level)基础构造的添加后,我们需要添加触发器,再次使用aspnet_regsql.exe命令,不过用-t来指定"

表名"

(tablename),且将-ed替换为-et,如下:

aspnet_regsql.exe-S<

i>

server<

/i>

-U<

user<

-P<

password<

-d<

database<

-t<

tableName<

-et

-E-d<

要对ScottsServer里的表authors和titles添加触发器,这样做:

aspnet_regsql.exe-SScottsServer-E-dpubs-tauthors-et

aspnet_regsql.exe-SScottsServer-E-dpubs-ttitles-et

就本文而言,我们要对表Products,Categories,和Suppliers添加触发器,具体的命令在第三步探讨。

第二步:

在文件夹App_Data里引用一个MicrosoftSQLServer2005Express版的数据库

我们刚刚说过,为了添加必要的基础构造,aspnet_regsql.exe命令需要用到数据库和服务器的名称。

但是对于放在文件夹App_Data里的一个MicrosoftSQLServer2005Express的数据库而言,它的数据库名和服务器名又是什么呢?

犯不着探究其数据库名和服务器名到底是什么,我发现最简单的方法是用SQL服务管理器(SQLServerManagementStudio)来将该数据库认作localhost/SQLExpressdatabase数据库,并重新命名。

如果你的机器里已经安装了SQLServer2005完整版,自然也就安装了SQL服务管理器。

如果你安装的是Express版本的话,你可以免费下载MicrosoftSQLServerManagementStudioExpressEdition.

首先,关闭VisualStudio,然后打开SQLServerManagementStudio,在WindowsAuthentication模式里选择连接到localhost/SQLExpress.

图1:

连接到localhost/SQLExpressServer

连接到服务器后,管理器将显示服务器,并将数据库、安全等以折叠的形式显示出来。

在数据库文件夹上右击,选添加(Attach)项,这样将弹出AttachDatabases对话框(见图2),点Add按钮,选择我们的web应用程序的App_Data文件夹里的NORTHWND.MDF数据库。

图2:

选App_Data文件夹里的NORTHWND.MDF数据库

这样将会把数据库添加到Databases文件夹,且数据库的名称可能是该数据库文件的绝对路径(fullpath).出于简便的原则,我们将其重命名为一个更友好(human-friendly)的名字,我将其命名为“DataTutorials”.

图3:

将新添加的数据库重命名

第三步:

对Northwind数据库添加Polling基础构造

现在我们添加了App_Data文件夹里的NORTHWND.MDF数据库,让我们添加polling基础构造吧,假定你已经将数据库重命名为“DataTutorials”,运行如下的命令:

aspnet_regsql.exe-Slocalhost/SQLExpress-E-dDataTutorials-ed

aspnet_regsql.exe-Slocalhost/SQLExpress-E-dDataTutorials-tProducts-et

aspnet_regsql.exe-Slocalhost/SQLExpress-E-dDataTutorials-tCategories-et

aspnet_regsql.exe-Slocalhost/SQLExpress-E-dDataTutorials-tSuppliers-et

完成上述4个命令后,在ManagementStudio里右击数据库,进入任务子菜单(Taskssubmenu),选分派(Detach)。

然后关闭ManagementStudio并重新打开VisualStudio.

打开VisualStudio后,在服务器资源管理器里展开数据库,你可以看到有新增的表(AspNet_SqlCacheTablesForChangeNotification),新的存储过程,以及对应于表Products,Categories,和Suppliers的触发器.

图4:

数据库包含了必需的Polling基础构造

第四步:

设置Polling服务

完成上述步骤后,最后我们需要设置polling服务。

这要用到Web.config文件,在里面指定要用到的数据库,以及检测频率(pollingfrequency),单位为毫秒。

下面的代码是每隔1秒对Northwind数据库检测一次。

<

?

xmlversion="

1.0"

>

configuration>

<

connectionStrings>

addname="

NORTHWNDConnectionString"

connectionString=

"

DataSource=./SQLEXPRESS;

AttachDbFilename=|DataDirectory|/NORTHWND.MDF;

IntegratedSecurity=True;

UserInstance=True"

providerName="

System.Data.SqlClient"

/>

/connectionStrings>

system.web>

...

!

--ConfigurethepollingserviceusedforSQLcachedependencies-->

caching>

sqlCacheDependencyenabled="

true"

pollTime="

1000"

>

databases>

NorthwindDB"

connectionStringName="

/>

/databases>

/sqlCacheDependency>

/caching>

/system.web>

/configuration>

在<

add>

元素里的name值(“NorthwindDB”)是一个易读(human-readable)的名称,它与某个具体的数据库对应。

当使用SQLcachedependencies的时候,我们需要引用在这里定义的数据库名。

我们将在第六步考察怎样使用SqlCacheDependencyclass类来缓存数据。

一旦确定了一个SQLcachedependency后,检测系统(pollingsystem)每隔定义的pollTime那么多毫秒对<

元素里的数据库进行连接,并执行名为AspNet_SqlCachePollingStoredProcedure的存储过——该存储过程是我们在第三步使用aspnet_regsql.exe命令行工具添加的,它返回的是表AspNet_SqlCacheTablesForChangeNotification里的每条记录的tableName和changeId值。

那些“过时”的SQLcachedependencies将会从内存清除掉。

应在权衡性能和数据刷新(datastaleness)的基础上设置pollTime.较小的pollTime值虽然导致请求数据库的次数增加,但能更快的将“过时"

的数据清除掉;

较大的pollTime值虽然减少了对数据库的请求次数,但增加了“过时”的缓存条目的呆滞时间。

还好,对数据库的请求只是执行一个简单的存储过程而已,该存储过程仅仅从一个简单的表返回很少的几行。

你最好多测试几个不同的pollTime值,在平衡数据库访问和数据刷新2方面的情况下找出一个理想的值。

pollTime值最小允许为500.

在上面的代码里,我们在<

sqlCacheDependency>

元素里指定了一个单一的pollTime值。

其实你也可以在<

元素里随意的指定一个pollTime值。

当你指定了很多个数据库,且你想为每个数据库都指定一个检测频率(pollingfrequency)时,这样做很有用。

第五:

声明SQLCacheDependencies

在第一到第四步骤,我们探讨了如何建立必需的数据库基础构造,以及设置检测系统(pollingsystem).完成上述步骤后,现在我们可以通过编程或声明的方式,在添加缓存条目时使用SQLcachedependency.在本节,我们探讨如何使用声明的方式使用SQLcachedependencies,在第六步再探讨通过编程的方式。

在《CachingDatawiththeObjectDataSource》教程里,我们考察了声明ObjectDataSource控件的缓存功能。

仅仅将EnableCaching属性设置为true,并将acheDuration属性设置为某个时间间(timeinterval),ObjectDataSource控件就会自动地将从“源对象”(underlyingobject)返回的数据进行缓存。

ObjectDataSource控件可以使用单个或多个SQLcachedependencies.

为此,打开文件夹Caching里的SqlCacheDependencies.aspx页面,在设计模式里,从工具箱拖一个GridView控件到页面上,设置其ID为ProductsDeclarative,从其智能标签里将其绑定到一个名为ProductsDataSourceDeclarative的ObjectDataSource.

图5:

创建一个名为ProductsDataSourceDeclarative的ObjectDataSource

设置该ObjectDataSource使用ProductsBLL类。

在SELECT标签里选GetProducts()方法;

在UPDATE标签里,选择包含3个输入参数——productName,unitPrice,和productID的UpdateProduct重载方法;

在INSERT和DELETE标签里选“(None)”.

图6:

使用包含3个输入参数的UpdateProduct重载方法

图7:

在INSERT和DELETE标签的下拉列表里选“(None)”

完成设置后,VisualStudio会为GridView里的每一列创建绑定列(BoundFields)和CheckBoxFieldsL列。

将ProductName,CategoryName,和UnitPrice以外的列都删除,对其应用什么格式化都可以。

在GridView的智能标签里启用分页、排序、编辑功能。

VisualStudio会将ObjectDataSource控件的OldValuesParameterFormatString属性设置为original_{0},为使GridView的编辑功能运行正常,要么删除该属性,要么将其设置为默认值:

{0}.

最后,在GridView上面添加一个LabelWeb控件,设置其ID为ODSEvents,再将其EnableViewState属性设置为false.做完上述修改后,页面的声明代码看起来应该和下面的差不多。

注意,我已经对GridView列的外观做了些定制,虽然这对SQLcachedependency功能来说并不是必要的。

asp:

LabelID="

ODSEvents"

runat="

server"

EnableViewState="

False"

GridViewID="

ProductsDeclarative"

AutoGenerateColumns="

DataKeyNames="

ProductID"

DataSourceID="

ProductsDataSourceDeclarative"

AllowPaging="

True"

AllowSorting="

Columns>

CommandFieldShowEditButton="

TemplateFieldHeaderText="

Product"

SortExpression="

ProductName"

EditItemTemplate>

TextBoxID="

Text='

%#Bind("

)%>

'

RequiredFieldValidatorID="

RequiredFieldValidator1"

ControlToValidate="

Display="

Dynamic"

ErrorMessage="

Youmustprovideanamefortheproduct."

SetFocusOnError="

*<

/asp:

RequiredFieldValidator>

/EditItemTemplate>

ItemTemplate>

Label2"

/ItemTemplate>

TemplateField>

BoundFieldDataField="

CategoryName"

HeaderText="

Category"

ReadOnly="

Price"

UnitPrice"

$<

Columns="

8"

"

{0:

N2}"

TextBox>

CompareValidatorID="

CompareValidator1"

Youmustenteravalidcurrencyvaluewith

nocurrencysymbols.Also,thevaluemustbegreaterthan

orequaltozero."

Operator="

GreaterThanEqual"

Type="

Cur

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1