2010-10-15 4 views
0

У меня есть приложение ASP.NET 3.5 с файлом базы данных SQL 2005 Express .mdf в папке App_Data. Позволяет называть Foo.mdf. Само по себе приложение ASP.NET может без проблем подключаться к базе данных. Все идет нормально.Приложение ASP.NET не будет совместно использовать базу данных с Sql Server Management Studio Express

Затем, если я установил на сервер Sql Server Management Studio Express и запустил его, он находит локальный экземпляр SQLEXPRESS и подключается к нему, но не отображает Foo.mdf в списке баз данных.

Итак, я пытаюсь подключить Foo.mdf, щелкнув правой кнопкой мыши по базам данных и выбрав Attach .. и найти .MDF. Это терпит неудачу с расплывчатой ​​ошибкой:

CREATE FILE encountered operating system error 32(error not found) 
while attempting to open or create the physical file 
'C:\inetpub\wwwroot\FooApp\App_Data\Foo.mdf'. (Microsoft SQL Server, Error: 5123) 

Если я остановить мой сайт ASP.NET в IIS, то приложите делает работы, но потом, когда я перезапустить мое приложение ASP.NET, он не может подключиться к Foo.mdf.

Итак, похоже, что SQL Express 2005 разрешит либо мое приложение , либо Management Studio connect. Это кажется действительно дерьмом - конечно, Sql Express должен допускать более одного соединения? Я ожидал, что он будет вести себя как обычный Sql Server.

Надеюсь, я делаю это неправильно. Пожалуйста, порекомендуйте.

+0

Не только одно приложение может подключаться к базе данных, но только один сервер может иметь физически привязанную базу данных. Вы должны прикрепить его к SQL Express и изменить свой ASP.NET config, чтобы просто подключиться к этому серверу и базе данных. –

ответ

2

Вы можете проверить строку подключения приложения и посмотреть, если он имеет Instance пользователя = истина

например:

Data Source=.\SQLEXPRESS;Integrated Security=true; AttachDbFilename=|DataDirectory|\mydb.mdf;User Instance=true; 

From MSDN: Другая основная проблема с экземплярами пользователя происходит потому, что SQL Server открывает базу данных файлы с эксклюзивным доступом. Это необходимо, потому что SQL Server управляет блокировкой данных базы данных в своей памяти. Таким образом, если более одного экземпляра SQL Server имеет один и тот же файл, существует вероятность повреждения данных. Если два разных пользовательских экземпляра используют один и тот же файл базы данных, один экземпляр должен закрыть файл, прежде чем другой экземпляр сможет его открыть.

Если это проблема, вы можете прикрепить базу данных в SQL Server Management Studio и изменить строки подключения следующим образом, чтобы несколько клиентов могли подключиться к одной базе данных.

Server=.\SQLEXPRESS;Database=myDataBase;Trusted_Connection=True; 

Если это не проблема в вашем случае, ознакомьтесь с разделом «Общие вопросы» по ссылке выше. Он может быть связан с разрешениями в соответствии с пунктами 1/2 в разделе «Общие вопросы»

+0

У меня действительно есть 'User Instance = True' в моей строке подключения. Я изменю его и попробую ваши предложения. Кроме того, в статье MSDN указывается, что я могу использовать SSEUtil для запуска сценариев sql против пользовательского экземпляра, что является исходной причиной, по которой я смотрел SSMSE в любом случае, так что это тоже удобно. – codeulike

1

У меня нет опыта использования базы данных ASP.NET по умолчанию, но вы попытались переместить MDF в свои данные SQL Express DATA папка? (по умолчанию: C: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA). В папке вы можете использовать Management Studio для присоединения файла к экземпляру SQL Express. Вы хотите, чтобы изменить строку подключения в файле web.config, чтобы выглядеть следующим образом:

<connectionStrings> 
    <add name="ApplicationServices" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=aspnetdb" 
    providerName="System.Data.SqlClient" /> 
</connectionStrings> 
0

Добавьте следующую учетную запись пользователя в папку * App_Data * вашего сайта: SQLServerMSSQLUser $. Ищите его в расширенных разрешениях безопасности, поэтому вы выполняете поиск там, а затем даете полный контроль над ним.