使用SQL Server Compact Edition进行文件共享冲突

时间:2012-06-19 18:34:42

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

我有一个用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...]

3 个答案:

答案 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>

它对我们有用!