我们在 web.config
中存储了一个用于构建 SQL Server CE 连接字符串的模板。并使用 string.format
设置数据源和临时路径值。
在 web.config
,DB连接字符串的模板为:
"Data Source={0}; Temp Path={1}; Mode=Read Only"
在
web.release.config
,我们用来构建部署包,DB连接字符串的模板为:
Data Source={0}; Temp Path={1}
现在我们只使用 SQL Server CE 数据库进行只读操作。所以,作为一个聪明的人,我想我会删除
web.release.config
中的连接字符串转换并且始终使用来自
web.config
的只读连接字符串.
这对我正在测试的数据库工作正常。但是使用不同的 SQL Server CE 数据库运行相同的代码会失败,并出现以下异常:
Exception 'System.Data.SqlServerCe.SqlCeException' with message 'The database is opened with a read-only connection. Can't perform post-initialization operations like re-building indexes and upgrading public tracking. Please re-open with a read-write connection. [ Database name = D:\inetpub\wwwroot\MyApp\App_Data\Storage.sdf ]'
我们正在使用
System.Data.SqlServerCe.4.0
提供者
为什么在部署到服务器的发布版本中,某些 SQL Server CE 数据库的只读访问失败,而其他数据库则没有?它是相同的代码,只是指向不同的
.SDF
文件。
.SDF
文件具有相同的架构,只是数据不同。
驱动程序是否试图重建索引,因为
.SDF
文件是某种较旧的格式?我们不应该在生产中使用只读连接吗?这就是原始代码进行转换的原因吗?为什么它们都在我的 Windows 7 工作站上使用只读连接工作?
请您参考如下方法:
您应该始终指定临时路径,因为在操作系统平台/版本之间移动数据库可能需要重建索引。
在这里查看我的博文:http://erikej.blogspot.dk/2009/08/running-sql-compact-from-cd-rom-read.html了解更多详细信息。