Attach database

giovedì 18 gennaio 2007 - 12.58

patry Profilo | Newbie

Salve a tutti,
sapreste dirmi come fare un attach da codice o da shell dos??
Mi spiego meglio...ho sviluppato un'applicazione in vb.net 2003 che utilizza un db in SQL server 2000. Dopo varie avventure sono riuscita a capire la logica di sql server e a individuare i seguenti passi per poter spostare il db su una macchina diversa (dove devo installare la mia applicazione)

-Scollegare db da SQL Query Analyzer:
USE master;
ALTER DATABASE mydb
SET SINGLE_USER;
GO
EXEC sp_detach_db 'mydb', 'true';

-A questo punto ho creato il mio pacchetto d'installazione aggiungendo come file esterni mydb_Data.mdf e mydb_Log.ldf

Arriviamo al punto cruciale: il db non è collegato quindi come faccio a collegarlo dopo l'istallazione?
oppure
E' possibile far collegare il db alla prima apertura del programma?

Ho cercato di seguire questa seconda strada, ma con scarsi risultati.....procedendo nel seguente modo:
1. Ho creato un file myscrit.sql in cui ho scritto
CREATE DATABASE $(myDatabase)
ON (FILENAME = '$(myPath)')
FOR ATTACH;
2. Nell'applicazione per analizzare il primo avvio ed eventualmente fare il collegamento ho inserito il seguente codice

If File.Exists(pathname) = False Then
Dim sw As StreamWriter = File.CreateText(pathname)
Dim apici As String = """"
sw.Write("C:\>sqlcmd -E -i")
sw.Write(apici)
sw.Write("C:\myScript.sql")
sw.Write(apici)
sw.Write(" -v myDatabase=")
sw.Write(apici)
sw.Write("mydb")
sw.Write(apici)
sw.Write(" myPath=")
sw.Write(apici)
sw.Write("C:\percorsodb\mydb_Data.mdf")
sw.Write(apici)
sw.Flush()
sw.Close()
Dim fullPath As String
fullPath = Path.GetFullPath(pathname)
System.Diagnostics.Process.Start(fullPath)
End If

in realtà non funziona... il comando sqlcmd è utilizzabile in sql server 2000? oppure suggeritemi un modo alternativo.

Grazie in anticipo dell'aiuto

Brainkiller Profilo | Guru

>Salve a tutti,
>sapreste dirmi come fare un attach da codice o da shell dos??

Il DOS non esiste più
Eventualmente Shell e basta.

>Mi spiego meglio...ho sviluppato un'applicazione in vb.net 2003
>che utilizza un db in SQL server 2000. Dopo varie avventure sono
>riuscita a capire la logica di sql server e a individuare i seguenti
>passi per poter spostare il db su una macchina diversa (dove
>devo installare la mia applicazione)

Io personalmente l'attach o il restore del DB lo farei manualmente e non automaticamente.
Oppure puoi esportare lo script di tutti gli oggetti su un file .sql che una volta lanciato sul server destinazione ti creerà tutto lo scheletro della struttura del database (zero dati però, sarà vuoto) non so se tu devi partire con il db vuoto o con dentro dei dati. In ogni caso si possono creare script anche per ripristinare tutti i dati.

>in realtà non funziona... il comando sqlcmd è utilizzabile in
>sql server 2000? oppure suggeritemi un modo alternativo.

Se non sbaglio sqlcmd.exe è di SQL Server 2005, per SQL 2000 c'è osql.exe anche se credo che con sqlcmd.exe si possano fare per compatibilità le stesse operazioni che si facevano con osql.exe.

Ciao
david
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5