2009-08-04 4 views
4

Ich schrieb ursprünglich eine Datenzugriffsebene in einem App_Code-Ordner auf meiner Website. Dann haben wir in einem separaten Projekt einen Webservice entwickelt. Damit sowohl die Website als auch der Webservice auf dieselbe DAL zugreifen können, habe ich sie in ein anderes Projekt verschoben. Ich habe ein Dataset mit Tableadaptern und um das DAL-Projekt kompilieren zu können, musste ich die Verbindungszeichenfolge den Einstellungen der Application-Eigenschaft hinzufügen. Aber das bedeutet, dass ich die DAL für jeden Einsatz neu kompilieren muss. Ich kann auch 2 oder 3 Websites auf dem Server mit der gleichen DAL haben. Daher möchte ich die Verbindungszeichenfolge in der web.config jeder Website festlegen und belassen. Muss ich meinen Code durchgehen und jedes Mal ändern, wenn ich eine Instanz eines Table Adapters erstelle? z.B. VonProbleme mit Verbindungszeichenfolgen mit DAL in separaten Projekt

using (MessageQueue adaptor = new MessageQueue()) 
{ 
    return adaptor.GetMessages(UserId, MobileId, StartDate, EndDate); 
} 

zu

using (MessageQueue adaptor = new MessageQueue()) 
using (OracleConnection connection = new OracleConnection(OracleUtilities.ConnectionString)) 
{ 
    adaptor.Connection = connection; 
    return adaptor.GetMessages(UserId, MobileId, StartDate, EndDate); 
} 

Oder gibt es einen besseren Weg?

Colin

Antwort

3

fand ich die Antwort war ich hier suchen:

Guidance needed ASP.Net app connection string

in der Antwort von s_ruchit.

Die Namen der Verbindungszeichenfolge in der Datei web.config müssen mit dem Namen der Verbindungszeichenfolge in der Datei app.config übereinstimmen, die einen vollständig qualifizierten Namen enthält. Also in meinem Fall habe ich ändern

<add name="ConnectionStringMainDB" 
    connectionString="<myConnStringHere>" 
    providerName="System.Data.OracleClient"/> 

zu:

<add name="DatabaseAccess.Properties.Settings.ConnectionStringMainDB" 
    connectionString="<myConnStringHere>" 
    providerName="System.Data.OracleClient"/> 

Keine weiteren Änderungen am Code erforderlich! Danke auch an Muhammed und freshr

+0

wir haben das gleiche Problem .. wie wir Problem lösen ist ... wir fügen benutzerdefinierte Klasse, die Verbindungszeichenfolge von web.config erhalten und dann manuell öffnen Verbindung bei Verwendung von tableadapter –

+0

Im nächsten Projekt wird diese Sache sehr helfen voll. –

+0

Wenn Sie diese Technik verwenden .. Können Sie mir bitte erklären, wie Sie mit der Transaktion umgehen, wenn Sie eine Inertion in mehreren Tabellen durchführen. –

1

Verwenden Sie einen Standard Connectionkonfigurationsbereich und Sie werden in der Lage die Verbindungszeichenfolge abzurufen, ohne zu einer Dienstprogramme Klasse zurückgreifen:

System.Configuration.ConfigurationManager.ConnectionStrings

Sie noch die Verbindungszeichenfolge setzen müssen in die Datei app.config oder web.config jeder Anwendung, die die Datenbank benötigt.

+0

Die Utilities-Klasse funktioniert. Es verwendet intern den ConfigurationManager und ruft die Verbindungszeichenfolge von web.config korrekt ab. Der Dataset-Designer benötigt jedoch eine Anwendungseinstellung, und der Code verwendet das Dienstprogramm derzeit nicht. Ich denke, ich werde alle Tableadapter-Verbindungen dynamisch einstellen müssen. Oder gibt es einen besseren Weg? – Colin

+0

Ich dachte, dass der DataSet-Designer diesen ConnectionStrings-Abschnitt direkt verwendet. Aber wenn nicht, könnten Sie vielleicht ein Factory-Muster verwenden, um korrekt konfigurierte Adapter zurückzugeben ... Auf diese Weise wird zumindest die dynamische Einstellung von Tabellenadaptern an einem Ort erledigt. – freshr

+0

Ich habe es gefunden, wenn die Namen übereinstimmen - aber die Namen müssen vollständig qualifiziert sein - siehe die ausführlichere Antwort, die ich hinzugefügt habe. Es ist keine dynamische Einstellung von Tabellenadaptern erforderlich! – Colin

Verwandte Themen