ms sql compact разрушительный сбой

 
0
 
MS SQL Server
ava
chipik | 07.09.2016, 21:46
Здравствуйте, помогите пожалуйста. Имеется база данных на ms sql compact 4.0, раньше работало все нормально , я периодически забирал базу методом ctrl+c ctrl+v с целью резервного хранения на другом компьютере. С недавних пор при попытке открыть базу данных через программу CompactView появляется сообщение "Невозможно открыть базу данных. Разрушительный сбой". У людей на компьютере (Windows XP) приложение и база данных работают стабильно, я же у себя ничего открыть не могу (Windows 7). При попытке запуска приложения .Net Framework(версии везде одинаковые 4.0) выдает следующее:
"Необрабатываемое исключение в приложении .... Разрушительный сбой" 
Сведения:
Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.Data.SqlServerCe.SqlCeException (0x80004005): Разрушительный сбой
   в System.Data.SqlServerCe.SqlCeConnection.Open(Boolean silent)
   в System.Data.SqlServerCe.SqlCeConnection.Open()
   в System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   в System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   в System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   в KMPR.kmprDataSet1TableAdapters.staffTableAdapter.Fill(staffDataTable dataTable) в d:\KMPR программа С#\KMPR\kmprDataSet.Designer.cs:строка 12850
   в KMPR.Authorization.Authorization_Load(Object sender, EventArgs e) в d:\KMPR программа С#\KMPR\Authorization.cs:строка 56
   в System.Windows.Forms.Form.OnLoad(EventArgs e)
   в System.Windows.Forms.Form.OnCreateControl()
   в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   в System.Windows.Forms.Control.CreateControl()
   в System.Windows.Forms.Control.WmShowWindow(Message& m)
   в System.Windows.Forms.Control.WndProc(Message& m)
   в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   в System.Windows.Forms.ContainerControl.WndProc(Message& m)
   в System.Windows.Forms.Form.WmShowWindow(Message& m)
   в System.Windows.Forms.Form.WndProc(Message& m)
   в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Затем окно ошибки закрывается и открывается еще раз. Физически программа расположена не в d:\KMPR программа С#\KMPR\ , там лежит старый проект. Удаление данной папки не помогло.За последнее время на данной машине поднимался сервер IIS,  его остановка не помогает. Подскажите у кого какие идеи. :dash1
PS если заменить базу данных старыми бэкапами, то приложение запускается нормально. Базу копировал уже раз 5 точно. На компьютере без сервисов пока не проверял, устанавливаю виртуалку.





Ответы (4)
ava
Akina | 07.09.2016, 22:09 #
Я не понимаю, зачем постить стек вызовов приложения, если проблема явно в структуре файла данных сервера...
Visual Studio -> Server Explorer -> Shrink & Repair
Либо 

SqlCeEngine("Data Source = MyDatabase.sdf").Repair(Nothing, RepairOption.RecoverAllPossibleRows)
ava
chipik | 08.09.2016, 00:10 #
Akina, сделал как вы советовали. База восстановилась, но в ней удалились почти все данные. Как вы думаете, почему база не переносится с компьютера? Ведь она идет как поврежденная только когда я ее сбрасываю на флешку, у пользователей работает как работала. Заранее спасибо. :smile
Делал так:
SqlCeEngine engine = new SqlCeEngine(@"Data Source=kmpr.sdf;Password=***;Persist Security Info=True");
engine.Repair(null, RepairOption.RecoverAllPossibleRows);
ava
Akina | 08.09.2016, 00:21 #
Цитата (chipik @  8.9.2016,  01:10 findReferencedText)
База восстановилась, но в ней удалились почти все данные. 

Ну тогда остаётся только экспорт из поломанной БД всех данных и заливка дампа в живую (старой версии или леченную, данные предварительно удалить).

Цитата (chipik @  8.9.2016,  01:10 findReferencedText)
почему база не переносится с компьютера? 

Она переносится. А вот приаттачиться не может из-за ошибок (скорее всего в метаданных). Либо в них внесены изменения, отражённые в системной БД (скажем, добавлен локальный пользователь), и не переносящиеся при таком копипасте.
Попробуй в качестве эксперимента корректно остановить сервис, и только потом копировать файл данных. И присоединять так же, при остановленном сервисе.
ava
chipik | 08.09.2016, 10:21 #
Akina, спасибо за советы! Оказалось что шалит флешка, скопировал на другую флешку и все заработало.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  Akina   chipik
advanced
Отправить