PDA

View Full Version : [C#] Connessione remota ad access


DarkSiDE
23-03-2007, 10:47
Sto scrivendo un'applicazione che lavora con dei db access sia in locale che in remoto, ora quello che mi chiedo, la connessione ai db in locale l'ho implementata con JET, se volessi collegarmi ad un db access che gira su IIS cosa/come dovrei fare?

Riordian
23-03-2007, 11:15
Sto scrivendo un'applicazione che lavora con dei db access sia in locale che in remoto, ora quello che mi chiedo, la connessione ai db in locale l'ho implementata con JET, se volessi collegarmi ad un db access che gira su IIS cosa/come dovrei fare?


devi svilupparlo te il codice per far accedere al db da remoto?
se è così io farei un web-service però dipende dalle esigenze che hai.

DarkSiDE
23-03-2007, 11:25
devi svilupparlo te il codice per far accedere al db da remoto?
se è così io farei un web-service però dipende dalle esigenze che hai.

io devo scrivere SOLO il client, nessun web-service

posso accedere tramite odbc al db remoto?

Riordian
23-03-2007, 13:14
io devo scrivere SOLO il client, nessun web-service

posso accedere tramite odbc al db remoto?


Allora non posso aiutarti, immagino si possa fare ma non ho mai affrontato una problematica del genere, bye ;)

Einstein
23-03-2007, 13:57
Che il database risieda in locale o in remoto, devi sempre utilizzare il provider System.Data.Oledb.
Poi il db non "gira" in IIS, ma ci sarà un'applicazione web hostata su IIS che accede al database Access e fa una visualizzazione web delle informazioni. Per accedere al db devi fare in modo che la cartella nella quale è contenuto il file MDB sia condivisa, poi specifichi il percorso di rete nella connection string in uso dalla tua papplicazione.
Questo vale in un contesto di rete locale; se il tuo client è al di fuori dalla rete locale, hai per forza bisogno di un qualcosa che ti faccia da tramite (es. web service).

Ciao

RaouL_BennetH
23-03-2007, 14:01
ti faccio un esempio però relativo a MySql (che usa un suo connettore). In linea di principio credo che non si discosti molto da una connessione in remoto su iis:



private string pathToDb = "database=mio_db;server=192.168.1.125;port=3306;user id = raoul; password=raoul;

try
{
MySqlConnection cn = new MySqlConnection(pathToDb);
cn.Open();
......
}
catch(MySqlException ex)
{
MessageBox.Show(ex.Message.ToString());
}

Riordian
23-03-2007, 14:19
Che il database risieda in locale o in remoto, devi sempre utilizzare il provider System.Data.Oledb.
Poi il db non "gira" in IIS, ma ci sarà un'applicazione web hostata su IIS che accede al database Access e fa una visualizzazione web delle informazioni. Per accedere al db devi fare in modo che la cartella nella quale è contenuto il file MDB sia condivisa, poi specifichi il percorso di rete nella connection string in uso dalla tua papplicazione.
Questo vale in un contesto di rete locale; se il tuo client è al di fuori dalla rete locale, hai per forza bisogno di un qualcosa che ti faccia da tramite (es. web service).

Ciao

Infatti è quello che pensavo anche io,
però a quanto dice lui deve accedere direttamente sul db,
probabilmente avrà il file access in una directory virtuale.

DarkSiDE
23-03-2007, 15:30
riconosco di essermi espresso male e vi chiedo scusa :)

Il problema è questo: ho un sito che si appoggia a un database.
Ora, da remoto, voglio accedere a quel database e sincronizzarlo con il database che ho sul mio database in locale.

Se il database remoto è registrato con il dsn, non possibile accedervi tramite odbc?

Nonostante sia tutt'altro che semplice da far funzionare, è possibile manipolare un database Access anche da un server (e da uno script) remoto.
Uno script come il seguente permetterà di accedere ad un database posto su un server diverso, su una rete diversa.
Per le lan sono disponibili altre soluzioni, certamente più performanti di questa.

Questo script utilizza RDS e necessita di un piccolo intervento, di seguito spiegato, sul web server.



<%

set conn = Server.CreateObject("ADODB.Connection")

conn.open "Provider=MS Remote;" &_
"Remote Server=http://127.0.0.1;" &_
"Remote Provider=Microsoft.Jet.OLEDB.4.0;" &_
"Data Source=d:\myweb\db.mdb;"

set rs = conn.Execute("SELECT * FROM tabella")

%>

DarkSiDE
23-03-2007, 18:57
scusate se uppo ma la cosa è MOLTO urgente :)

Einstein
25-03-2007, 10:33
Se usi .NET, non ha senso che tu prenda in considerazione ODBC, ma ti conviene usare i providers nativi di ADO.NET (nel tuo caso, System.Data.OleDb).
considerando l'esempio che ha i postato, devi condividere la cartella d:\myweb (o comunque la cartella che contiene il Db), fare:

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\servername\sharename\db.mdb;User Id=Admin";
using (OleDbConnection conn = new OleDbConnection(connStr))
{
try
{
conn.Open();
// Vari OleDbCommand per accedere ai dati...
}
catch (oleDbExcelption ex1)
{
// Gestione errori....
}
finally
{
if (conn.State == ConnectionState.Open) conn.Close();
}
}

Scusa eventuali errori, ma non ho verificato la sintassi... ;)

DarkSiDE
25-03-2007, 11:20
Se usi .NET, non ha senso che tu prenda in considerazione ODBC, ma ti conviene usare i providers nativi di ADO.NET (nel tuo caso, System.Data.OleDb).
considerando l'esempio che ha i postato, devi condividere la cartella d:\myweb (o comunque la cartella che contiene il Db), fare:

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\servername\sharename\db.mdb;User Id=Admin";
using (OleDbConnection conn = new OleDbConnection(connStr))
{
try
{
conn.Open();
// Vari OleDbCommand per accedere ai dati...
}
catch (oleDbExcelption ex1)
{
// Gestione errori....
}
finally
{
if (conn.State == ConnectionState.Open) conn.Close();
}
}

Scusa eventuali errori, ma non ho verificato la sintassi... ;)

grazie mille, la sintassi è corretta ;)

Come già detto ho già usato ado.net per i db in locale e lo userò anche per i db in lan, purtroppo ho dimenticato che access non fa server ed ho fatto una gran confusione. Da quanto ho capito le uniche soluzioni sono o scrivere un semplice webserver che prende le query in input, le lancia su access e restituisce il risultato o utilizzare rds che a quanto pare, fa cagare.