在我写了《在SQL Server Express版和Compact版之间做出选择》之后,园子里有些朋友问到SQL Server精简版(sqlce)支不支持ASP.NET?当时我也不确定,我自己测试过确实不行,但是觉得怪怪的,没有道理不支持啊!
今天看了Steve Lasker的blog,终于搞清楚了!
由于sqlce默认不支持ASP.NET,很多用户因此对MS提出请求,不断抱怨,甚至恐吓(如果你不让它支持,我就使用XX产品)。Steve Lasker终于坐不住,出来澄清这一切
其实sqlce的市场定位非常明确,主要是为了解决智能客户端的离线数据存储和同步问题。这个在《在SQL Server Express版和Compact版之间做出选择》也有阐明了。因此,微软并没有针对sqlce作为Web站点数据库的使用场景进行优化。在Web站点多用户访问和数据并发的环境下,sqlce的性能不理想,跟SQL Server Express不能比。所以建议Web站点还是采用SQL Server Express或SQL Server数据库。要知道sqlce是内嵌数据库引擎,而SQL Server Express是数据库服务。现在SQL Server开发团队最近发布的Hosting Toolkit SQL Server可以协助你在Web服务器上部署SQL Server Express。
那么,ASP.NET到底能不能使用sqlce作为数据存储呢?可以!
默认情况下,在ASP.NET的工作进程中打开sqlce的数据库连接时,sqlce将被封锁。你可以通过下面的代码解除这个限制,这行代码在RTM版中会有所变,因为sqlce已经改名了,不再叫SQL Server Everywhere:
AppDomain.CurrentDomain.SetData("SQLServerEverywhereUnderWebHosting", true)
要注意的是,在ASP.NET中不能使用sqlce的数据同步功能。
总之,多大的鞋配多大的脚,大家还是不要在ASP.NET中使用sqlce,如果偏要用,那请注意后果了!
参考:
SQL Server Compact Edition under ASP.net and IIS
SqlCeConnection Class (System.Data.SqlServerCe)