Μήπως το connectionstring σου κοιτάζει την ίδια βάση? Δοκίμασε να συνδεθείς στη master ή κάποια άλλη βάση πρώτα. Βεβαιώσου επίσης ότι δεν είναι κανείς άλλος συνδεδεμένος, ούτε SQL Analzer ούτε Enterprise Manager, ούτε ανοιχτό query παράθυρο μέσα στο visual studio
Και δεν έχει μείνει κανένα connection στο pool? Και είναι και ο SQLSERVERAGENT σταματημένος?Αν δεις την περιγραφή του λάθους (3101) αναφέρει ότι μπορείς να χρησιμοποιήσεις την εντολή ALTER DATABASE SET SINGLE_USER για να πετάξεις όλους τους χρήστες από τη βάση. Μετά το restore, κάνεις ALTER DATABASE SET MULTI_USER για να δουλεύει πάλι η βάση για πολλούς χρήστες.Τρέξε και ένα sp_who από το connection σου πριν κάνεις το restore. Ίσως να βρεις κάποιο connection που δεν περίμενες
Αν είναι τόσο σημαντικό να κρατήσεις το connection, εκτέλεσε ένα USE Master ή κάποια άλλη άσχετη βάση επάνω του και μετά το restore ξανακάνε USE MyDB. Γιατί όμως να μην το κλείσεις και να το ξανανοίξεις?
Δήλωσε ένα CommandObject, βάλτο να κάνει "USE xxx" (όπου xxx ή άλλη DB) και σύνδεσέ το με το Connection. Κατόπιν τρέξτο με ExecuteNonQuery.Μην δοκιμάσεις να παίξεις με το ChangeDatabase method γιατί απλά ανοίγει ένα δεύτερο connection στη νέα DB!
Για να κάνεις restore μία βάση π.χ dbSample στον SQL Server 2000, πρέπει να βεβαιωθείς ότι κανένα Connection στη βάση δεν είναι ανοιχτό.By default όταν ανοίγεις ένα Connection και έπειτα το κλείνεις αυτό μένει στο Pool για γρήγορη απάντηση σε μελλοντικά αιτήματα.Αυτό μπορείς να το λύσεις αν προσθέσεις στο ConnectionString του Connection με το οποίο έχεις ανοίξει ΠΡΟΗΓΟΥΜΕΝΩΣ τη βάση dbSample το ";pooling=false".