2013-05-12 2 views
0

У меня есть приложение C#, и я хочу восстановить базу данных с помощью моего приложения. мой код sql такой вот:Недопустимое имя объекта после восстановления базы данных

alter database SSDPrototypeV3 set offline with rollback immediate 
restore database SSDPrototypeV3 
from disk = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Backup\dustinepogi.bak' 
alter database SSDPrototypeV3 set online 

Когда я запускаю это в своем приложении, он успешно восстанавливает свой дБ. но когда я пытаюсь запустить sql-запрос (например, оператор select), он говорит, что у меня есть недопустимое имя объекта, в частности, в таблице, в которой я выполнил оператор select. но затем, если я перезагружу свое приложение после закрытия, он будет полностью восстановлен. как я могу избавиться от этой проблемы?

ответ

1

Предполагая, что вы используете SqlClient (и вы используете пул соединений):

  • переключатель освоить первый
  • сделать ваше восстановление
  • очистить пул соединений: с помощью SqlConnection.ClearAllPools (очищает все пулы для провайдера) или ClearPool (очищает только пул, связанный с конкретной строкой соединения)
  • запускать команды против исходной базы данных

И, надеюсь, ступайте

0

У базы данных есть текущая база данных, что все запросы выполнены против. Начальная база данных Параметр строки подключения определяет текущую базу данных, используемую при открытии соединения.

Я предполагаю, что текущая база данных изменится на master, когда вы берете свою SSDPrototypeV3 базу данных в автономном режиме. У вас есть два варианта, чтобы исправить это:

  • Изменение текущей базы данных обратно, выполнив use SSDPrototypeV3 или
  • закрыть и повторно открыть соединение.
+0

я попытался закрыть соединение на моем приложении, и включил его освоить, но я все еще есть та же самая проблема/ошибка , –

+0

@DustineTolete: Вы не должны переключаться на 'master', вы должны переключиться на свою БД! Выбирает ли 'select * из SSDPrototypeV3.dbo.someTable' работу? – Heinzi