salve Tiziano,
tiziano-ricci ha scritto:
La mia confusione è creata (forse) da Visual Studio 2005.
Ci sono dute tipi di Sql Server database che puoi utilizzare all'interno di VS2005: locali e reali ossia Sql Server hosted databases.
direi assolutamente no, ma lo vediamo in seguito
Se vuoi utilizzare la versione locale di database devi avere SqlServer Express installato. Infatti io che ho installato la versione
Standard mi ritorna l'errore che non è installato Sql Express.
Ora il file mdf che generari da VisualStudio non ha le stesse caratteristiche di un file MsAccess?
no.. quello che tu stai in questo modo usando sono una feature presente solo in SQLExpress che si chiama User Instance..
in definitiva viene eseguita (e caricata in memoria) una "copia" di SQLExpress per ogni applicazione che ne faccia uso, rendendo completamente "privato" l'accesso a questa "istanza", che disporra' di una propria copia dei database di sistema ed i cui file di database utente verranno "sempre" posizionati nella cartella di esecuzione dell'applicazione.. l'applicazione avra' privilegi da sysadim sulla base dati, quindi tutto il discorso di "sicurezza" viene bypassato...
ma i database, sia di sistema che utente, restano database SQL Server e nulla hanno a che spartire con una soluzione file based simile ad access...
La stringa di connessione mi sembra preveda l'utilizzo del percorso di file , quindi suppongo che se piazzo il file mdf sul server mi diventa un sistema file-server tipo MsAccess.
e' stato "inventato" un modo di "attaccare" un database al momento della connessione stessa.. come probabilmente saprai, un database SQL Server e' essenzialmente un'entita' logica che si appoggia per la propria area di storage su piu' file fisici... perche' il database sia visibile a SQL Server, esso deve essere "registrato" (o attaccato) tramite apposite istruzioni, ad esempio le vecchie procedure di sistema sp_attach_xxxx mantenute per compatibilita' con SQL Server 2000 (anche se deprecate), e la nuova istruzione CREATE DATABASE ..... FOR ATTACH...
questo e' stato parzialmente integrato nella modalita' di connessione che provvede, qualora impostata in tal senso, ad attaccare il database in base alla posizione del file dati primario (i file dati secondari ed i transaction log devono risiedere nella stessa cartella del file dati primario) se il database non fosse gia' registrato..
questa impostazione e' valida per tutte le edizioni di SQL Server, al contrario delle User Instances (o RANU).. la particolaria' dei database attaccati in questo modo e' che il relativo nome logico di database viene autogenerato dal sistema in base al posizionamento fisico del file dati primario, con un limite di 1128 caratteri...
quindi il database Pubs, attaccato dalla cartella c:\Program Files\Vendor\Applicazione\Files\pubs_data.mdf avra' un nome logico "poco bello"
...
ma per l'uso che solitamente ne fa un applicativo poco importa, visto che la connessione viene stabilita in base al nome fisico del file ed il nome logico solitamente non viene mai utilizzato all'interno degli applicativi...
non ho pero' mai verificato cosa pero' succeda nel caso una stored procedure referenzi un oggetto con la nomenclatura a tre livelli
Database.Schema.NomeOggetto... sarebbe interessanto farlo
E' qui che non riesco a capire, quando andai al convegno Microsoft a Roma venne detto che per distribuire un'applazione Web bastava che venisse distribuito il file mdf (con tutto il resto), semplificando cosi la WebHosting di un'applicazione che utilizza dati Sql Server.
Potete darmi ulteriori spiegazioni?
mi pare alcuanto azzardata un'affermazione simile
non penso che la "maggioranza" delle applicazioni, anche web, si basino su SQLExpress che consente in questo senso la possibilita' di utilizzare le RANU... diciamo che puo' essere una soluzione per scenari "di nicchia", ma al di la' di cio', possono consentire tale possibilita' viste le "idiosincrasie" delle versioni MSDE ed Express..
i relativi database hanno infatti l'opzione autoclose impostata, che fa si che il dababase venga "chiuso" al momento della chiusura dell'ultima connessione attiva.. questo fa si che i file di database siano "copiabili" sul file system, anche se logicamente il database resta registrato sull'istanza... cio' significa che i file non possono essere spostati ma solo copiati... il passo successivo sono le RANU, dove alla chiusura dell'ultima connessione attiva, l'istanza di SQLExpress viene chiusa, quindi i file di database sono liberamente spostabili... se copi l'intera cartella dell'applicazione in altra posizione e la riesegui, la registrazione del database avverra' su una nuova apposita istanza privata di SQLExpress, senza causare alcun inconveniente..
tornando ai database "distaccati", SQLX e MSDE impostano anche l'opzione relativa al modello di recupero "simple", dove il transaction log viene continuamente riciclato nel suo spazio, visto che, in parole povere, non mantiene parte attiva di log relativamente alle transazioni committate... una chiusura e distacco del database rendono possibile lo spostamente del database relativamente al suo solo file dati senza transaction log, che verra' automaticamente "ricreato" all'apertura (cioe' al riattacco) del database stesso..
saluti