Webpart是asp.net 2.0中一项非常出色的功能,但是非常遗憾的是,默认是使用sql express 2005作为后台数据库。而且很多初学者在本机写完程序迁移到服务器上以后才如梦初醒,原来还要后台数据库的,甚至WROX出的《Professional ASP.NET 2.0》在讲webpart这节时都不曾提及后台数据库的事,真是让人失望之极(起码我没看到)。而目前主流的网站都是用MS SQLServer 2000或是Access作为数据库,如何才能把Webpart的数据库从SQL Express 2005迁移到SQLServer 2000和Access呢?
迁移到SQLServer 2000
微软提供了一个数据库配置程序,可以方便的在SQLServer2000和SQLServer2005上进行webpart的数据库配置 。
1.首先运行SQLServer
2.然后运行C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_regsql.exe 会出现一个图形化的操作界面,根据提示便可自动生成一个名为aspnetdb的库。
3.打开vs.net 2005,新建一个网站,往页面上拖一个webpartmanager,运行一下,出错。因为你还没有配web.config呀,而且vs.net2005与vs.net2003有所不同,默认是没有web.config文件的,需要我们自己增加,(当然你也可以直接修改C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG下默认的web.config,但是我不推荐)。
4.在新加的web.config中把 <connectionStrings/>一行修改成如下
<connectionStrings>
<remove name="LocalSqlServer" />
<add name="LocalSqlServer" connectionString="Data Source=localhost;Initial Catalog=aspnetdb;Persist Security Info=True;User ID=sa;Password="
providerName="System.Data.SqlClient" />
</connectionStrings>
完成后的web.config为
<?xml version="1.0" encoding="utf-8"?>
<!--
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
“网站”->“Asp.Net 配置”选项。
设置和注释的完整列表在
machine.config.comments 中,该文件通常位于
/Windows/Microsoft.Net/Framework/v2.x/Config 中
-->
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<!--
设置 compilation debug="true" 将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为 true。
-->
<compilation debug="false" />
<!--
通过 <authentication> 节可以配置 ASP.NET 使用的
安全身份验证模式,
以标识传入的用户。
-->
<authentication mode="Windows" />
<!--
如果在执行请求的过程中出现未处理的错误,
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
开发人员通过该节可以配置
要显示的 html 错误页
以代替错误堆栈跟踪。
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
</system.web>
</configuration>
迁移到Access
将webpart的数据库迁移到sqlserver是一件非常方便的事,但是对于很多小型网站来说,access才是最佳选择。但是要将数据库迁移到Access却是一件非常的复杂的事情, 而且网上也没有查到这方面现成的中文资料,之前在微软英文asp.net新闻组发了个贴子也没人回答,有些英文资料也是语焉不详,不成系统。
下面我来说一下详细的过程。
首先你需要一个access的Provider以及相对应的数据库。之前我曾经从网上找了一个access的provider,并尝试把SQLServer版的表导出成Access,结果发现这条路是行不通的,因为不匹配。
目前在英文google里能找到两个access的Provide
一个是AccessPersonalizationProvider,下载地址是
http://www.kowitz.net/files/AccessPersonalizationProvider.zip
命名空间为MarkItUp.SingleUserBlog.Web.WebParts.AccessProviders 虽然在源代码注释里也写着copyright是微软的,但是下载时没有对应的数据库。
另外一个是微软官方网站上的以前Beta1时出的 SampleAccessProviders,解压后自带一个access数据库,而且还有web.config的样例。下载地址是
http://msdn.microsoft.com/vstudio/eula.aspx?id=96713a8e-b8d4-4d6e-bb8f-027e6c8e15d8
我用的是后者。
下载后,名字是SampleAccessProviders.vsi,解压缩后可以在C:/Documents and Settings/Administrator/My Documents/Visual Studio 2005/Templates/ProjectTemplates/Visual Web Developer/Starter Kits/ASP.NET Access Providers 找到。
你可以用vs.net2005打开Access.csproj编译出dll,名字为SampleAccessProviders.dll,然后把ASPNetDB.mdb复制到App_Data目录,然后在自己的网站中引用SampleAccessProviders.dll,并参考那个web.config修改自己的配置文件。
关于其他数据库
由于SampleAccessProviders是开放源代码的,所以参照着自己扩展Provider。目前网上可以找到XmlFilePersonalizationProvider。对于Oracle,mysql等数据库可以自己写扩展Provider,但是目前我们已有了access这种数据库独立的方式,所以可以通过混用来实现更为方便。