2012-06-19 2 views
0

У меня есть персональный сайт, написанный на веб-страницах ASP.NET с небольшой базой данных SQL Server Compact Edition. Это удобно для меня, потому что база данных хранится как файл (.sdf), и когда я добавляю, изменяю или удаляю любые записи и проверяю их локально, я могу просто использовать Publish ... в WebMatrix и скопировать файл .sdf над.Нарушение обмена файлами с использованием SQL Server Compact Edition

Это отлично работает, за исключением случайного сообщения об ошибке, которое я получаю при обращении к файлу .sdf.

я ... There is a file sharing violation. A different process might be using the file.

Иногда обновления страницы будет исправить это, иногда я должен обновить страницу несколько раз. Я предполагаю, что миграция базы данных в базу данных SQL Server исправит ее, но я действительно не хочу этого делать. Это лучший вариант?

Вот ссылка на сайт, может быть, вы попали ошибку: http://www.garethlewisweb.com

Есть ли что-то я должен изменить в коде, или мне нужно спросить мой хостинг компании, чтобы изменить что-то. У меня нет большого опыта в этой области.

Спасибо!

Update

Вот мой код

_AppStart.cshtml

@{ 
    WebSecurity.InitializeDatabaseConnection("GarethLewisWeb", "UserProfile", "UserId", "Email", true); 
    // WebMail.SmtpServer = "mailserver.example.com"; 
    // WebMail.EnableSsl = true; 
    // WebMail.UserName = "[email protected]"; 
    // WebMail.Password = "your-password"; 
    // WebMail.From = "[email protected]"; 
} 

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

Не совсем ответ на эту конкретную проблему, но переход на SQL Server решил эту проблему.

2

Ну, вы знаете, это похоже на попытку вымыть посуду в духовке. Это не сработает.

В принципе - скорее всего, вы пытаетесь создать несколько экземпляров SQL Server CE, а затем использовать одну и ту же БД и угадать, что - у старого все еще есть исключительная блокировка.

В общем, вы НЕ МОЖЕТЕ ИСПОЛЬЗОВАТЬ SQL CE НА ВЕБ-САЙТЕ. Он не предназначен для одновременного доступа, и даже если вы один из немногих, это похоже на задание проблем. Google приходит, дьявол приходит, а иногда ваш браузер приходит с двумя запросами, которые перекрываются и бум - мертв.

У вас нет кода, так что я могу только догадываться, что вызывает проблему, но документация для CE - это QUITE strict - это НЕ для многопоточных сценариев.

+0

Переход на SQL Server это! К счастью, у WebMatrix очень хороший инструмент миграции. Позор, это не позволяет больше, чем один пользователь за раз, это было бы идеальным решением. Благодарю. –

+0

Неверный SQL Server Compact разработан и протестирован для ASP.NET одновременный доступ (до 100, максимум 250 одновременных подключений) – ErikEJ

+0

Тогда это ошибка кода, которая, как я уже сказал, является нефиксируемой, не зная точных путей кода, как я говорю. – TomTom

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> 

Это сработало для нас!