PDA

View Full Version : [VB.NET] Problema con SQL e MSDE


Lehendakari
08-07-2008, 17:23
Ciao a tutti.
Ho un problema di collegamento via SQL a dei database.
La stringa di connessione che uso è la tipica "Data Source=NOMESERVER;Initial Catalog=NOMEDB ;Persist Security Info=True;User ID=NOME;Password=PWD"
Se il database si trova sul server SQL, mi collego ovviamente senza problemi.

Se però il database si trova su un portatile (su cui è installato MSDE), non riesco a collegarmi (timeout).
Ho provato con Microsoft.SqlServer.Management.Smo, se il database è sul mio pc, e quindi posso mettere (local) come NOMESERVER, si collega, ma se provo a sostituirlo col nome di un altro PC siamo daccapo.

Ho infine provato con SQLDMO, se provo a caricare la lista dei DB presenti su un pc, me la carica, ma poi non so come eseguire delle query sul DB selezionato. Il codice che ho usato è questo:

Dim objDMO As SQLServer
objDMO = New SQLDMO.SQLServer
objDMO.Connect(NomeServer, USER, PWD)
Dim objDB As Database
objDB = objDMO.Databases
objDB.Name = NomeDB

Dim oTheResults As SQLDMO.QueryResults
oTheResults = objDB.ExecuteWithResults("SELECT CAMPO1 FROM TABELLA WHERE ....")
Dim VALORECERCATO As Int16 = 0
VALORECERCATO = oTheResults.GetColumnString(1, 1)

objDMO.DisConnect()
objDMO = Nothing



Dove sbaglio?

Strat
08-07-2008, 19:34
Se intendi che devi accedere ad un'istanza di sql server che risiede su un altro pc della lan devi abilitare le connessioni dall'esterno che per default su msde sono chiuse.

Lehendakari
09-07-2008, 09:12
Dovrebbero già essere abilitate, perché un'altra applicazione (chiaramente non fatta da me) che faccio girare dal mio pc andando a pescare i dati sul DB che sta su un altro portatile, funziona perfettamente.
Se però è qualcosa che devo settare io dall'applicativo che sto sviluppando, non ho idea di come fare.

(grazie mille per l'aiuto, intanto ;) )

RobyG_08
09-07-2008, 14:43
Dico una banalità che però a volte ci si dimentica (proprio ieri collegandomi ad un SQL server 2005 su un portatile ci son cascato), ci son mica dei firewall di mezzo?

Lehendakari
09-07-2008, 14:54
No, perché se provo a lanciare un altro applicativo, che va ad agire sullo stesso DB dell'altro pc, non c'è nessun problema: è questo che non riesco a capire...

Eppure,se io uso una stringa di connessione "normale", con "Data Source=NOMEPC;Initial Catalog=NOMEDB ;Persist Security Info=True;User ID=NOME;Password=PWD", non mi trova il pc... :muro:

Oltretutto, fino ad avere una lista dei DB presenti sul notebook, ci arrivo, quindi vede il pc che mi interessa, solo che dopo non so come fare ad agire sul db che seleziono!

RobyG_08
09-07-2008, 15:02
E se lanci un ping sul nome o ip del pc dove sta il db ti risponde?
(ammesso che l'altro applicativo che provi sia su un'altro pc ancora, se l'applicativo che funziona è sulla stessa macchina dove c'è il tuo che non funziona la domanda è superflua)

RobyG_08
09-07-2008, 15:06
Oltretutto, fino ad avere una lista dei DB presenti sul notebook, ci arrivo, quindi vede il pc che mi interessa, solo che dopo non so come fare ad agire sul db che seleziono!

Ah ho letto solo adesso sta cosa...a sto punto sembrerebbe quasi un problema dell'utente che usi per collegarti al db :mc:

Lehendakari
09-07-2008, 15:50
Neanche questo, perchè se prendo lo stesso DB e faccio backup e restore sul server centrale (o anche prendendo i file mdf ed ldf e rimpiazzando quelli che ci sono), collegandomi con quell'utente e quella pwd ci accedo senza problemi. :(

Proprio non riesco a capire perchè se metto nella stringa di connessione Data Source=SERVER funziona, se invece metto Data Source=NOTEBOOK non me lo vede (eppure il nome non è sbagliato, perchè se metto lo stesso nome NOTEBOOK con Microsoft.SqlServer.Management.Smo, il server lo vede) :mc:

Che ci sia qualche cavolo di riferimento ulteriore da aggiungere? Io inizialmente ho messo solo System.Data.SqlClient pensando che bastasse sostituire il nome del server, poi ho provato con Microsoft.SqlServer.Management.Smo ed infine con SQLDMO :(
(non avendo mai dovuto gestire un collegamento del genere, può essere benissimo che sia una cavolata del genere...)

RobyG_08
09-07-2008, 15:55
Usi visual studio come ambiente di sviluppo?

Lehendakari
09-07-2008, 16:14
Sì, il 2005 Pro

(grazie per l'interessamento ;) )

RobyG_08
09-07-2008, 16:17
E dalla finestra Esplora Server riesci ad aggiungere una connessione a quel DB con gli stessi dati che usi nella stringa di connessione?

(figurati è un piacere! :) )

Lehendakari
09-07-2008, 16:35
No, non mi fa neanche vedere il pc dalla tendina.
Eppure se io nel form creo una listbox e la faccio riempire con l'elenco dei pc attivi che ottengo con SmoApplication.EnumAvailableSqlServers, il pc c'è.

RobyG_08
09-07-2008, 16:38
Guarda, io ho sempre usato l'SqlClient per connessioni a sql server, però mi vien ragionevolmente da dire che se manco da esplora server riesci a connetterti, è più un problema "sistemistico" che applicativo

Lehendakari
09-07-2008, 16:55
Ok, grazie mille!!!

motogpdesmo16
09-07-2008, 17:00
Controlla questi punti:
1) Firewall: in tal caso puoi anzitutto vedere su quale porta
è in ascolto SQL SERVER e quindi aprire tale porta sul FIREWALL
2) Protocollo TCP non abilitato in SQL-SERVER_ abilitare il
protocollo
N.B.: per testare entrambi i punti 1 e 2 usa l'utility
SRVNETCN.EXE che normalmente viene installata nella cartella
C:\Programmi\Microsoft SQL Server\80\Tools\Binn

3) problemi di risoluzione dei nomi :dalla macchina client prova a
connetterti direttamente all'indirizzo ip xxx.yyy.zzz del server di
database e vedi se riesci a connetterti.

Tienici aggiornai;)

Lehendakari
09-07-2008, 17:47
Macché, il pc lo pingo senza problemi, e il protocollo TCP è abilitato...

La cosa stranissima è che l'applicativo che funziona (realizzato però in ambiente visual studio 2003) usa la stessa stringa di connessione SQL che cerco di usare io!!!
Boh, o c'è qualche riferimento che mi manca, o non so proprio che cavolo pensare!!

motogpdesmo16
09-07-2008, 17:54
sei sicuro che sia installata solo una ed una sola istanza di MSDE su quel portatile??
Può essere che l'applicazione sviluppata in 2003 stia puntando su un'istanza che non è quella predefinita??

<per vedere le istanze: c:\programmi\microsoft sql server e dovresti trovare due cartelle 80 e MSSQL>

Lehendakari
09-07-2008, 17:57
Ok, grazie mille, domattina provo a controllare, perché adesso è (per fortuna) ora di andare!
Buona serata!!!