我有一个用ASP.NET网页编写的个人网站,有一个小的SQL Server Compact Edition数据库。这对我来说很方便,因为数据库存储为文件(.sdf),当我添加,修改或删除任何记录并在本地测试时,我可以在WebMatrix中使用Publish ...并复制.sdf文件结束了。
除了访问.sdf文件时收到的随机错误消息之外,这很有用。
我明白了......
There is a file sharing violation. A different process might be using the file.
有时页面刷新会修复它,有时我必须刷新页面几次。我想将数据库迁移到SQL Server数据库会修复它,但我真的不想这样做。这是最好的选择吗?
以下是该网站的链接,也许您会遇到错误:http://www.garethlewisweb.com
我需要在代码中更改某些内容,还是需要让托管公司更改内容。我在这个领域并没有很多经验。
谢谢!
更新
这是我的代码
_AppStart.cshtml
@{
WebSecurity.InitializeDatabaseConnection("GarethLewisWeb", "UserProfile", "UserId", "Email", true);
// WebMail.SmtpServer = "mailserver.example.com";
// WebMail.EnableSsl = true;
// WebMail.UserName = "username@example.com";
// WebMail.Password = "your-password";
// WebMail.From = "your-name-here@example.com";
}
Default.cshtml
@{
Layout = "~/Shared/_SiteLayout.cshtml";
Page.Title = "Home";
var db = Database.Open("GarethLewisWeb");
var featuredPhotoSQL = " SELECT col " +
" FROM tablename ";
var featuredPhoto = db.QuerySingle(featuredPhotoSQL);
}
[Lots of HTML and C# code here...]
答案 0 :(得分:2)
嗯,你知道 - 这就像试图在烤箱里洗碗。它不起作用。
基本上 - 很可能你尝试创建SQL Server CE的多个实例,然后使用相同的数据库并猜测 - 旧的仍然具有独占锁。
通常,您不能在网站上使用SQL CE。它不是为并发访问而做的,即使你是为数不多的,也就是要求麻烦。谷歌出现了,一个恶魔来了,偶尔你的浏览器会出现两个重叠且繁荣的请求。
你没有显示任何代码,所以我只能猜出导致问题的原因,但CE的文档是QUITE严格的 - 它不适用于多线程场景。
答案 1 :(得分:0)
不是这个特定问题的答案,但迁移到SQL Server解决了这个问题。
答案 2 :(得分:0)
当我们添加Mode = Read Only时; Temp Path = c:/ Temp在连接字符串中然后修复。
<connectionStrings>
<add name="XYZ" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\XYZ.sdf;Max Database Size = 4091;Enlist=false;encryption mode=engine default;password=!secret!;Mode = Read Only;Temp Path=c:/temp" />
</connectionStrings>
它对我们有用!