22 messaggi dal 28 luglio 2010
Salve, vorrei che mi spiegaste una cosa che non capisco

Per potermi collegare al database access che sto usando ho dovuto specificare la connectionstring in questo modo

private string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Gege\Documenti\Visual Studio 2008\Projects\Mari_sito_guidastudente\Mari_sito_guidastudente\App_Data\iST.mdb;Persist Security Info=False";
        


E cosi' funziona, solo che è un path assoluto. Se io volessi passare il progetto a qualcun'altro non sarebbe piu' valido il percorso e non funzionerebbe nulla, stesso problema se pubblicassi il sito in internet, mica conosco i loro path.

Sto provando in vari modi con path relativi ma non funziona nulla, non c'è un modo?

Grazie mille
2 messaggi dal 08 agosto 2010
Ciao, anche a me è capitata da poco la stessa cosa.
Premetto che ho scritto la connectionstring direttamente nel web.config e richiamata da li dove necessario.
Non ho voluto perdere tanto tempo sulla questione e alla fine ho risolto facendo un Server.MapPath("~") in modo da sapere qual'era il percorso fisico del mio sito e successivamente l'ho copiato nella connectionstring.
Se hai la connectionstring in una classe dovresti poter sapere in modo più semplice qual'è il path utilizzando lo stesso metodo Server.MapPath("~/tuadirectory/tuodb.mdb").

Ti segnalo comunque che nel forum sono presenti altri esempi.

Prova a dare un'occhiata qui :

http://forum.aspitalia.com/forum/post/258484/CSharp-Percorso-Database-Aruba.aspx
22 messaggi dal 28 luglio 2010
ciao Roddo, grazie per la risposta. In effetti anch'io preferirei mettere nel web config 1 volta per tutte la connectionstring e fare riferimento sempre a quella ma non riesco e sto cercando di capire il perchè.

Per ora ho usato il metodo da te suggerito molto bene nei file che necessitavano della connectionstring.
 private string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("/App_Data/iST.mdb") + @";Persist Security Info=False";


Cosi' facendo ricava il percorso corretto come se l'avessi dichiarato in maniera assoluta.


Casomai riuscissi a capire perchè non legge dal web config, come faccio a dichiarare in quel file il metodo? Essendo XML il web config, mica posso metterci C#, tu hai parlato di copia ma non ho ben capito.

Io ho 2 connectionstring dichiarate nel file web.config principale della root, perchè ho creato un MembershipProvider custom e un RoleProvider custom e vorrei che anche loro fossero ricavati dinamicamente.
2 messaggi dal 08 agosto 2010
Scusa, forse non mi sono spiegato bene!
Per "ho copiato nel web.config" intendevo che ho proprio scritto il path nella connectionstring.

Se ti può essere d'aiuto io ho fatto un metodo in una mia classe Utils che ricava runtime la connectionstring.
Alla fine è stata una scelta obbligata proprio perchè (da quel che ho capito) il path della connectionstring deve essere fisico e questo non mi permetteva di avere due ambienti separati (test/produzione).

Comunque ti posto le due righe di codice e vedrai che sarà tutto più chiaro.



       
public static string getConnectionString(HttpContext context) {     
return context.Request.Url.Host.Contains("dominiodiproduzione") ? ConfigurationManager.ConnectionStrings["db_produzione"].ToString() : ConfigurationManager.ConnectionStrings["db_test"].ToString();       
    }       


In breve ho scritto due connectionstring (una per il sito in locale e una per quello in produzione) e ho fatto questo metodo che ti restituisce la stringa corretta per il db che devi usare.
Poi in tutti i miei metodi non ho fatto nient'altro che richiamare il metodo
getConnectionString passando come parametro HttpContext.Current .

In questo caso il codice da te postato diventerebbe :
     
private string connStr = getConnectionString(HttpContext.Current);



Spero ti sia utile!
In bocca al lupo!
22 messaggi dal 28 luglio 2010
Ciao Roddo, vediamo se ho capito: nel web config hai 2 connectionstring, una con il path del tuo database in locale che usi per il test (in pratica come il percorso da me indicato nel mio primo post), poi ne hai un'altra che è il path del server remoto che hosta il tuo sito.

Il metodo che hai scritto inizializza la connStr in base al contesto corrente, se sei in locale la stringa prenderà il valore del path di nome db_test altrimenti l'altro.

Una buona idea, forse posso usarla per evitare di dichiare ogni volta la connectionstring nei vari file C# che ne necessitano e lasciarla solo nel web.config


Tuttavia mi resta 1 dubbio, per fare cio' tu conosci il tuo path locale (e vabbè quello è normale) e conosci il path del remoto (già conoscere questo è più complicato, ma nel tuo primo post hai spiegato come fare)

La cosa grave è, se io devo passare il mio progetto a qualcuno che vuole usarlo su una sua macchina, non funzionerà se quest'ultimo non edita la connectionstring con il proprio path.
Io devo consegnare il progetto a un professore che deve valutarlo, non posso conoscere a priori il path del db sul suo pc, per questo cercavo di ricavarlo in maniera dinamica.

Che posso fare? :/


EDIT: RISOLTO!
E' spiegato come fare in quest'articolo
http://www.aspitalia.com/script/794/Specificare-Stringa-Connessione-Path-Relativo-Web.config-ASP.NET-2.0.aspx

Era pure una cosa semplice XD
Roddo grazie lo stesso per la disponibilità
Modificato da mishima il 09 agosto 2010 02.02 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.