10 Stimmen

Verbinden mit SQL CE db mit SQLConnection

Das ist eine ziemlich einfache Frage. Ich baue eine Anwendung, die Daten aus einer SQL Server 2005-Instanz liest. Ich wollte einige Tests auf meinem Laptop (die nicht über SQL 2005) ausführen, so dass ich auf Swapping in einer lokalen Datenbank für den Zweck der Tests gesucht wurde.

Ich verwende VS2008, so dass die Compact Edition DB eine natürliche Wahl zu sein schien. Ich hatte gehofft, nur meine Verbindungszeichenfolge auszutauschen, aber es scheint, es wird nur lassen Sie mich mit der CE-Datenbank mit der SqlCeConnection und nicht SqlConnection verbinden. Gibt es eine Möglichkeit, dies zu umgehen, Modifikatoren kann ich in der Verbindungszeichenfolge vielleicht verwenden?

8voto

Anton Gogolev Punkte 109749

Es ist tatsächlich möglich, SQL CE anstelle eines vollwertigen SQL Servers zu verwenden, indem nur die Konfigurationsparameter geändert werden: Ändern Sie die Verbindungszeichenfolge und verwenden Sie IDbXXX Familienschnittstellen, wo immer möglich, statt plattformspezifischer SqlXXX y SqlCeXXX ein. Siehe DbProviderFactories .

Beachten Sie jedoch die Unterschiede in den SQL-Dialekten dieser beiden Plattformen.

1 Stimmen

Kennen Sie einen guten Link, der die "Unterschiede in den Dialekten" hervorhebt? Es wäre wirklich nützlich, wenn es eine Seite gäbe, die die wichtigsten Dinge auflistet, die in SQL Server nicht unterstützt werden.

6voto

noelicus Punkte 13603

Ja, Sie können SQL Compact und/oder SQL Server verwenden, indem Sie stattdessen auf die Basisklassen verweisen. Zum Beispiel:

IDbConnection Connection;

if (Compact)
    Connection = new SqlCeConnection();
else
    Connection = new SqlConnection();

Die Verbindungszeichenfolge muss beispielsweise auf Ihre Datendatei für SQL Compact verweisen: "Data Source=urData.sdf;Persist Security Info=False;" . Mehr Beispiele hier .

Dieser Link erklärt, was Unterschiede zwischen SQL Server und SQL Compact da sie nicht identisch ist.

0 Stimmen

Danke für die zusätzlichen Informationen über die Dialektunterschiede, das ist sehr nützlich. Ich denke, der Beispielcode wird auch funktionieren, aber ist nicht ganz so sauber (mit expliziten Verweis CE-Verbindungstypen) als explizite Klassenverweise zu vermeiden und DbProvider-Fabriken verwenden und die Konfiguration verwenden, um den Verbindungstyp stattdessen zu verwalten (wie pro die ausgewählte Antwort).

2voto

BFree Punkte 100035

Alle SQL-bezogenen Objekte, die Sie für eine der beiden DBs benötigen, erben von der abstrakten Basis Db... (z.B. DbConnection, DbDataAdapter etc...). Man kann also eine Art DatabaseManager-Klasse schreiben, die bei der Instanziierung wissen muss, ob man es mit Sql oder Sql Ce zu tun hat. Von da an haben Sie nur noch mit den Objekten der Basisklasse zu tun (DbConnection usw.). Auf diese Weise müssen Sie nur die Instanziierung Ihrer Managerklasse jedes Mal ändern.

Ein weiterer Vorteil dieser Vorgehensweise ist, dass Sie nicht viel am Code ändern müssen, wenn Sie später zu einem anderen Anbieter wechseln möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X