Condividere database sql express 2005 in rete

giovedì 03 aprile 2008 - 14.20

86Marco Profilo | Expert

Salve
ho creato una applicazione in visual basic 2008 che interagisce con un database sql server express 2005.
Ora, questo database riseiede su un pc (che funge da server) e gli altri computer della rete devono poter connettersi al database tramite il programminoda me creto.
Se scribo questo codice il database non puo essere connesso ma x quale motivo?


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try
'Dim con As SqlClient.SqlConnection
'Dim strconn As String
strconn = "Data Source=.\SQLEXPRESS;AttachDBFilename=" & _
"\\80.182.69.xxx\db\Prova.mdf" & _
";Integrated Security=True; Connect Timeout=30; User Instance=True"

con = New SqlClient.SqlConnection(strconn)
con.Open()
StatusBar1.Text = "Connesso a " & con.Database
Catch ex As Exception
StatusBar1.Text = "Impossibile trovare il database a cui connettersi"
Finally
End Try
End Sub


P.S.: ho x sbaglio duplicato questa domanda in un altra parte del forum spero di non aver fatto confudione.
Grazie

lbenaglia Profilo | Guru

>Se scribo questo codice il database non puo essere connesso ma
>x quale motivo?

1) Hai abilitato le connessioni remote (protocollo TCP/IP) via Surface Area Configuration (SAF) o Configuration Manager?
2) Hai verificato che eventuali firewall non blocchino la porta TCP utilizzata dall'istanza?

Ti suggerisco di impostare una porta statica e di aprire SOLO quella sui firewall:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=10971

>strconn = "Data Source=.\SQLEXPRESS;AttachDBFilename=" & _
>"\\80.182.69.xxx\db\Prova.mdf" & _
>";Integrated Security=True; Connect Timeout=30; User Instance=True"

2) Modifica la stringa di connessione evitando l'utilizzo di quella PORCATA di user instance.
Nel Data source dovrai semplicemente specificare l'IP del server ed il nome dell'istanza remota, il database (Initial Catalog) e la modalità di autenticazione (integrata nel caso tutti i PC in LAN appartengano al medesimo dominio, SQL Server in tutti gli altri casi).

La sintassi la trovi qua:
http://www.connectionstrings.com/?carrier=sqlserver2005

>Grazie
Prego.

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

86Marco Profilo | Expert

lbenaglia ringraziarti ormai è fin troppo poco... ho letto il thread che mi hai consigliato circa la connessione al database e la proverò al + presto...
Solo una curiosità... tu parli di configurare il firewall su tutte e due le macchine... ma xche? non dovrei solo aprire la porta sul computer nel quale risiede l'sql server e il database .mdf?

In più non riesco a capire quel tipo di stringa di connessione che devo variare... in che modo devo scrivere la stringa che mi consenta di andare a recuperare il databse che si trova sul server?
Grazie ;)

Capisco che poi magari non capendo una cosa la faccenda diventa particolarmente seccante e potresti seccarti... scusami tanto ma ho cercato tanto qualcosa che mi consenta di far comunicare il databse dall'esterno ma a parte il tuo articolo niente.... Se riuscissi a capire quelle poche cose su cui ho dubbi sicuramente sarebbe tutta un altra cosa.

speedx Profilo | Junior Member

La tipologia di connessione cambia a seconda del provider che vuoi utilizzare per l'accesso al database e ad eventuale security impostata su server e db.
Una abbastanza semplice è questa

Provider=SQLNCLI;Server=myServerAddress\SQLEXPRESS;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

detto questo dipende da come devono essere configurati gli accessi al tuo db



//// Marcello C.

lbenaglia Profilo | Guru

>Solo una curiosità... tu parli di configurare il firewall su
>tutte e due le macchine... ma xche? non dovrei solo aprire la
>porta sul computer nel quale risiede l'sql server e il database
>.mdf?
Si, nel post non è specificato bene.
Sul client devi abilitare la porta in uscita solo se hai installato un FW software in grado di bloccare anche le connessioni in uscita oppure se il client è protetto da un FW hardware con una funzionalità analoga.

>In più non riesco a capire quel tipo di stringa di connessione
>che devo variare... in che modo devo scrivere la stringa che
>mi consenta di andare a recuperare il databse che si trova sul
>server?
Dato che utilizzi Visual Basic 2008 con SQL Server Express, la connection string corretta sarà:

SQL Server Authentication:
Data Source=myServerAddress\SQLEXPRESS;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;

Windows Authentication:
Data Source=myServerAddress\SQLEXPRESS;Initial Catalog=myDataBase;Integrated Security=SSPI;

>Grazie ;)
Prego.

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

86Marco Profilo | Expert

Ok quindi fammi capire bene per l'ultima volta....
Io ho il computer a nel quale ho installato Visual basic e SQL Server Express
Una volta che ho fatto per filo e per segno tutti ipassaggi del tuo consiglio sul computer dove risiede l'sql server cosa devo fare sul computer o sui computer che devono connettersi al server?


Marco

86Marco Profilo | Expert

Niente non sono riusciuto a fare niente.
Per ultimo ti invio la mia stringa di connessione che non sono riuscito a configurare bene come mi hai gentilmente consigliato tu:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim con As SqlClient.SqlConnection
Dim strconn As String

strconn = "Data Source=79.30.231.xxx\SQLEXPRESS;AttachDbFilename= " & _
"C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Prova.mdf;" & _
"Integrated Security=True;Connect Timeout=30;User Instance=True"


con = New SqlClient.SqlConnection(strconn)
con.Open()
StatusBar1.Text = "Connesso a " & con.Database
Catch ex As Exception
StatusBar1.Text = "Impossibile trovare il database a cui connettersi"
Finally
End Try

end sub


Per il resto ho aperto SQL Surface Area Confoiguration, ho settato TCP only, ho riavviato il srvizio successivamente ho settato la porta 1433 su TCP Propriety e ho aprto dal firewall di windows la porta 1433 come TCP.

Prova a connettermi con il codice di sopra ma midice sempre impossbile connettersi al server...
questa è il mio ultimo post sull'argomento... se qualcuno mi vuole ancora aiutare vi ringrazio... ho rischiato di fare sclerare gli amici che qui hanno fatto di tutto per aiutarmi.
grazie ancora


lbenaglia Profilo | Guru

>Una volta che ho fatto per filo e per segno tutti ipassaggi del
>tuo consiglio sul computer dove risiede l'sql server cosa devo
>fare sul computer o sui computer che devono connettersi al server?

Come ti ho già detto specificare nella stringa di connessione il nome o l'ip del computer che ospita l'istanza seguita dall'eventuale nome (nel caso di named instance).

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

lbenaglia Profilo | Guru

>strconn = "Data Source=79.30.231.xxx\SQLEXPRESS;AttachDbFilename=
>" & _
>"C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Prova.mdf;"
>& _
>"Integrated Security=True;Connect Timeout=30;User Instance=True"

Ti ho detto di NON USARE le User Instances!!!!
Rileggi BENE le mie precedenti risposte.

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

vetustold Profilo | Newbie

>>strconn = "Data Source=79.30.231.xxx\SQLEXPRESS;AttachDbFilename=
>>" & _
>>"C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Prova.mdf;"
>>& _
>>"Integrated Security=True;Connect Timeout=30;User Instance=True"
>
>Ti ho detto di NON USARE le User Instances!!!!
>Rileggi BENE le mie precedenti risposte.
>
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

è un pomeriggio che ci provo con stringhe di connessione trovate in giro, l'ultima stringa provata è questa

strConn = "Data Source=192.168.1.10\\SQLEXPRESS;Initial Catalog=DataBaseDiRete;Integrated Security=SSPI;";

nulla, sempre lo stesso errore, errore 26

Dalla postazione di lavoro tutto ok, funziona pure con il nome del computer server al posto dell'indirizzo a quattro bytes. Mi dovrò rassegnare a continuare ad usare un file di Access come database di rete, la stringa di connessione OleDb funziona che è una meraviglia ! Quando scoprirò qual'è la soluzione (=stringa di conenssione o impostazioni particolari di rete), passerò a SQLServer.

P.S.: il database SQL Server che non posso usare, al momento in rete, lo ricavato da un file di ACCESS da MS SQL Sever Migration Assistent for Access che ha fatto un ottimo.

Francesco
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5