none
Procedura di attach e detach database tramite C# RRS feed

  • Domanda

  • Domanda abbastanza banale. Come faccio ad eseguire queste due procedura da codice c#. Se utilizzo un command per staccare il database mi dice naturalmente che la connessione è aperta

    esempio:

                SqlCommand comandoxxx = new SqlCommand("EXEC sp_detach_db 'Carico_Scarico', 'true';", connessionedb);

    Ragazzo come devo fare?

    giovedì 5 marzo 2015 13:26

Risposte

  • Per reimpostare l'accesso a tutti gli utenti, il comando è:

    ALTER DATABASE Carico_Scarico SET MULTI_USER 

    Per quanto riguarda il problema del database in uso, probabilmente la tua applicazione dovrà collegarsi ad un database diverso da quello che stai cercando di scollegare.

    HTH


    Alberto Dallagiacoma
    My Italian Blog: http://blogs.ugidotnet.org/alby
    Twitter: http://twitter.com/albertodall
    DotDotNet - User Group .NET Emilia Romagna: http://www.dotdotnet.org

    • Contrassegnato come risposta Lion14 giovedì 5 marzo 2015 22:51
    giovedì 5 marzo 2015 14:53
  • Ciao , ti dice che è in uso perché sicuramente sei connesso con la tua applicazione.

    Dovresti fare una cosa di questo tipo

    use master
    go
    
    exec sp_detach_db N'Carico_Scarico'
    go

    Spero di aver compreso il tuo quesito,


    Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.

    • Contrassegnato come risposta Lion14 giovedì 5 marzo 2015 22:02
    giovedì 5 marzo 2015 15:06

Tutte le risposte

  • Ciao,

    Puoi mettere il database in single user mode prima di eseguire il detach:

    ALTER DATABASE Carico_Scarico SET SINGLE_USER WITH ROLLBACK IMMEDIATE

    HTH,


    Alberto Dallagiacoma
    My Italian Blog: http://blogs.ugidotnet.org/alby
    Twitter: http://twitter.com/albertodall
    DotDotNet - User Group .NET Emilia Romagna: http://www.dotdotnet.org

    giovedì 5 marzo 2015 13:42
  • Mi fai un esempio più ampio?

    Poi come rimetto il server in multiutente?

    ho provato comunque a farlo e mi dice

    Eccezione non gestita di tipo 'System.Data.SqlClient.SqlException' in System.Data.dll

    Ulteriori informazioni: Impossibile scollegare il database 'Carico_Scarico' perché è in uso.

    • Modificato Lion14 giovedì 5 marzo 2015 13:50
    giovedì 5 marzo 2015 13:47
  • Per reimpostare l'accesso a tutti gli utenti, il comando è:

    ALTER DATABASE Carico_Scarico SET MULTI_USER 

    Per quanto riguarda il problema del database in uso, probabilmente la tua applicazione dovrà collegarsi ad un database diverso da quello che stai cercando di scollegare.

    HTH


    Alberto Dallagiacoma
    My Italian Blog: http://blogs.ugidotnet.org/alby
    Twitter: http://twitter.com/albertodall
    DotDotNet - User Group .NET Emilia Romagna: http://www.dotdotnet.org

    • Contrassegnato come risposta Lion14 giovedì 5 marzo 2015 22:51
    giovedì 5 marzo 2015 14:53
  • Ciao , ti dice che è in uso perché sicuramente sei connesso con la tua applicazione.

    Dovresti fare una cosa di questo tipo

    use master
    go
    
    exec sp_detach_db N'Carico_Scarico'
    go

    Spero di aver compreso il tuo quesito,


    Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.

    • Contrassegnato come risposta Lion14 giovedì 5 marzo 2015 22:02
    giovedì 5 marzo 2015 15:06
  • Eccezione non gestita di tipo 'System.Data.SqlClient.SqlException' in System.Data.dll

    Ulteriori informazioni: Sintassi non corretta in prossimità di 'go'.

    Sintassi non corretta in prossimità di 'go'.

    questo è l'errore che mi da

    questo è il mio codice:

    connessionedb.Open();
    SqlCommand singleuser = new SqlCommand("ALTER DATABASE Carico_Scarico SET SINGLE_USER WITH ROLLBACK IMMEDIATE", connessionedb);
    
    singleuser.ExecuteNonQuery(); 
    
    SqlCommand cdetach = new SqlCommand("use master go exec sp_detach_db N'Carico_Scarico' go", connessionedb);
    
    cdetach.ExecuteNonQuery(); 
    
    connessionedb.Close();

    giovedì 5 marzo 2015 22:39
  • Comunque ho risolto per ora con il consiglio di Alberto Dallagiacoma, ho creato un database vuoto "  prova e la connessone la faccio con quello. In questa maniera faccio:

    single user

    detach

    attach

    multiuser

    connessionedb.Open();
                SqlCommand singleuser = new SqlCommand("ALTER DATABASE Carico_Scarico SET SINGLE_USER WITH ROLLBACK IMMEDIATE", connessionedb);
    
                singleuser.ExecuteNonQuery(); // unico valore, non c'è bisogno di utilizzare il reader
    
                SqlCommand cdetach = new SqlCommand("EXEC sp_detach_db 'Carico_Scarico', 'true';", connessionedb);
    
                cdetach.ExecuteNonQuery(); // unico valore, non c'è bisogno di utilizzare il reader
                connessionedb.Close();
    
    
    /////////////////////////////////////
    
    
    
    //////////////////////////////////////
    connessionedb.Open();
                SqlCommand attaccadatabase = new SqlCommand("CREATE DATABASE Carico_Scarico ON (FILENAME = 'C:\\caricoscarico\\Carico_Scarico.mdf'), (FILENAME = 'C:\\caricoscarico\\Carico_Scarico_log.ldf') FOR ATTACH;", connessionedb);
    
                attaccadatabase.ExecuteNonQuery(); // unico valore, non c'è bisogno di utilizzare il reader
    
                SqlCommand multiute = new SqlCommand("ALTER DATABASE Carico_Scarico SET MULTI_USER", connessionedb);
    
                multiute.ExecuteNonQuery(); // unico valore, non c'è bisogno di utilizzare il reader


    • Modificato Lion14 giovedì 5 marzo 2015 22:53
    giovedì 5 marzo 2015 22:52