Problema gestione database in rete lan

giovedì 29 novembre 2007 - 09.34

nicholas086 Profilo | Newbie

Ciao a tutti!
Io sono nuovo di questo forum e vorrei esporvi subito un problema che mi da non poco filo da torcere
Io lavoro in una biblioteca e ho preparato un programma molto semplice in visual c# per gestire il prestito di alcune riviste (chi le prende, in che data, quale numero della rivista e rientro)
Per fare questo ho creato un database denominato PrestitoRiviste in SQLserver (perciò con estensione mdf)
Siccome lo scopo di tutto questo sarebbe di avere un programma da aprire da tutte le varie postazioni di prestito presenti nella biblioteca ho bisogno che da uno qualsiasi dei nostri computer collegati in rete lan sia possibile aprire il database. Per fare questo avevo pensato di mettere il database su un solo computer (in una cartella condivisa) e di mettere su tutti gli altri soltanto l'eseguibile, modificando ovviamente le stringhe di connessione al database in modo che vadano a pescare il database sul percorso (ad esempio) "//PRESTITO1/DOCUMENTI CONDIVISI/DATABASE/PRESTITORIVISTE.MDF".
Il problema nasce proprio qui, perchè quando il programma lanciato da un altro computer in lan tenta di aprire il database appare un errore simile a questo (dico simile perché purtroppo in questo momento non ho sotto mano il testo esatto): "il percorso //PRESTITO1/ECCETERA non è un percorso di database valido"
Cosa devo fare?
Il programma, se eseguito sullo stesso computer su cui si trova il database, non da nessun problema, però io ho voluto scriverlo proprio per l'esigenza di poterlo a prire da qualsiasi postazione.
Grazie in anticipo!

lbenaglia Profilo | Guru

>Per fare questo ho creato un database denominato PrestitoRiviste
>in SQLserver (perciò con estensione mdf)
>Siccome lo scopo di tutto questo sarebbe di avere un programma
>da aprire da tutte le varie postazioni di prestito presenti nella
>biblioteca ho bisogno che da uno qualsiasi dei nostri computer
>collegati in rete lan sia possibile aprire il database. Per fare
>questo avevo pensato di mettere il database su un solo computer
>(in una cartella condivisa) e di mettere su tutti gli altri soltanto
>l'eseguibile, modificando ovviamente le stringhe di connessione
>al database in modo che vadano a pescare il database sul percorso
>(ad esempio) "//PRESTITO1/DOCUMENTI CONDIVISI/DATABASE/PRESTITORIVISTE.MDF".
>Il problema nasce proprio qui, perchè quando il programma lanciato
>da un altro computer in lan tenta di aprire il database appare
>un errore simile a questo (dico simile perché purtroppo in questo
>momento non ho sotto mano il testo esatto): "il percorso //PRESTITO1/ECCETERA
>non è un percorso di database valido"
>Cosa devo fare?
Fermarti e prendere qualche giorno per capire la differenza esistente tra un DBMS basato su file (come Microsoft Access) ed un DBMS server (come Oracle Database, SQL Server, DB2, PostgreSQL, ecc...).

Quello che hai scritto non ha assolutamente senso per un DBMS server, dato che l'accesso ai dati è coordinato da un servizio esterno che provvede alla gestione della concorrenza, sicurezza, consistenza, ecc.

Una applicazione client che necessita di accedere al DBMS dovrà prima di tutto autenticarsi (quindi presentasi con una login valida) ed una volta "riconosciuta" dal DBMS ricevere le autorizzazioni assegnate dal DBA per svolgere il suo lavoro.

Per quanto riguarda SQL Server un database è SEMPRE costituito da ALMENO una coppia di file: il master data file (.mdf) che contiente il catalogo di sistema ed eventualmente oggetti definiti dall'utente, e dal transaction log (.ldf) un file sequenziale contenente tutte le modifiche effettuare ed utilizzato per mantenere consistente lo stato del database.

Una volta configurata l'istanza per esporsi alle altre macchine in LAN, dovrai modificare la stringa di connessione per puntare ad essa.
In questo thread troverai i passi necessari per esporre una istanza SQL Server Express:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=10971

Invece su questo sito troverai innumerevoli esempi di stringhe di connessione:
http://www.connectionstrings.com

>Grazie in anticipo!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

nicholas086 Profilo | Newbie

Grazie mille!
Appena a casa proverò a fare così (tra parentesi, chiedo scusa per la mia ignoranza )
Intanto che aspetto di poter provare faccio un'altra domanda:
il mio discorso di prima (mettere il database su un'unica macchiana e creare il collegamento sulle altre) sarebbe valido se invece che di un database SQL server si trattasse di un database di access?
Lo chiedo perché quello stesso database l'ho creato anche con access.
E a questo proposito, c'è un modo (non so, un programma o qualche particolare procedura) per trasformare un database SQL server in uno di access senza doverlo invece riscrivere da capo, cosa che infatti ho fatto con quello di cui ho parlato sopra (e fortuna che i campi non erano moltissimi )?

Grazie ancora della disponibilità!

lbenaglia Profilo | Guru

>Appena a casa proverò a fare così (tra parentesi, chiedo scusa
>per la mia ignoranza )
Perché uno si dovrebbe scusare?
Questa è bella

>il mio discorso di prima (mettere il database su un'unica macchiana
>e creare il collegamento sulle altre) sarebbe valido se invece
>che di un database SQL server si trattasse di un database di
>access?
Per essere valido lo sarebbe, ma rimane una porcata
In un DBMS file based come Access, il "motore" risiede su ogni singolo client. Questo significa che se metti l'.mdb in una share di rete, ogni volta che un client esegue una query deve portasi in locale TUTTI i dati delle tabelle coinvolte dalla query, risolvere in locale la query e restituire il risultato richiesto.
Pensa cosa succederebbe se eseguissi una SELECT su 10 tabelle in JOIN, ognuna delle quali con 500.000 righe... andrei a saturare gli switch di rete per ottenere magari 2 righe

Un DBMS Server invece non soffre di questo problema (e di MOOOOOOLTI altri ) dato che in rete viaggiano solo "i comandi SQL" ed i risultati della query. Le query vengono risolte sul computer che ospita il DBMS (quindi in locale).

>E a questo proposito, c'è un modo (non so, un programma o qualche
>particolare procedura) per trasformare un database SQL server
>in uno di access senza doverlo invece riscrivere da capo, cosa
>che infatti ho fatto con quello di cui ho parlato sopra (e fortuna
>che i campi non erano moltissimi )?
Si, puoi utilizzare l'Upsize Wizard di Access oppure il nuovo SQL Server Migration Assistant for Access:
http://www.microsoft.com/sql/solutions/migration/access/default.mspx

>Grazie ancora della disponibilità!
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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