使用只读连接打开SqlCeException数据库

时间:2016-09-29 19:51:13

标签: asp.net asp.net-mvc ado.net sql-server-ce

我们在web.config中存储用于构建SQL Server CE连接字符串的模板,并使用string.format设置数据源和临时路径值。

web.config中,数据库连接字符串的模板是:

"Data Source={0}; Temp Path={1}; Mode=Read Only" 

web.release.config中,我们用来构建部署包,数据库连接字符串的模板是:

Data Source={0}; Temp Path={1} 

现在我们只使用SQL Server CE数据库进行只读操作。因此,作为一个smartypants,我想我会删除web.release.config中的连接字符串变换,并且只使用web.config中的只读连接字符串。

这对我正在测试的数据库工作正常。但是,使用不同SQL Server CE数据库运行的相同代码失败,但出现以下异常:

  

异常'System.Data.SqlServerCe.SqlCeException',消息'The   数据库以只读连接打开。无法执行   后初始化操作,如重建索引和升级   公共跟踪。请使用读写连接重新打开。 [   数据库名称= D:\ inetpub \ wwwroot \ MyApp \ App_Data \ Storage.sdf]'

我们正在使用System.Data.SqlServerCe.4.0提供商

为什么在部署到服务器的发布版本中,只读取一些SQL Server CE数据库的访问失败而不是其他SQL Server CE数据库的访问失败?它是相同的代码,只是指向不同的.SDF文件。 .SDF文件具有相同的架构,只有不同的数据。

驱动程序是否尝试重建索引,因为.SDF文件是某种旧格式?我们是否应该在生产中使用只读连接?这就是为什么原始代码有变换的原因?为什么他们都在我的Windows 7工作站上使用只读连接?

1 个答案:

答案 0 :(得分:0)

您应始终指定临时路径,因为在OS平台/版本之间移动数据库可能需要重建索引。

有关详细信息,请参阅我的博客帖子:http://erikej.blogspot.dk/2009/08/running-sql-compact-from-cd-rom-read.html