2009-04-27 12 views
8

Ziemlich einfache Frage. Ich erstelle eine App, die Daten von einer SQL Server 2005-Instanz liest. Ich wollte einige Tests auf meinem Laptop durchführen (der nicht über SQL 2005 verfügt), also suchte ich in einer lokalen Datenbank nach den Tests.Verbinden mit SQL CE db mit SQLConnection

Ich benutze VS2008, so schien die Compact Edition DB eine natürliche Wahl. Ich hatte gehofft, meine Verbindungszeichenfolge nur austauschen zu können, aber es scheint, dass es mich nur mit der SqlCeConnection und nicht SqlConnection Verbindung mit der CE-Datenbank verbinden lässt. Irgendwie können Modifikatoren, die ich in der Verbindungszeichenfolge verwenden kann, vielleicht?

Antwort

7

Es ist eigentlich sehr möglich CE Benutzer SQL anstelle von ausgewachsenen SQL Server durch nur Ändern der Konfigurationsparameter: Verbindungszeichenfolge ändern und, wo immer möglich, anstelle von plattformspezifischen SqlXXX und SqlCeXXX diejenigen IDbXXX Familie Schnittstellen zu verwenden. Siehe DbProviderFactories.

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

+0

genau das, was ich gesucht habe danke. funktioniert ein Vergnügen. – TygerKrash

+1

Kennst du einen guten Link, der die "Unterschiede in Dialekten" hervorhebt? Es wäre sehr nützlich, wenn eine Seite wichtige Dinge auflistet, die in SQL Server nicht unterstützt werden. – noelicus

1

Alle SQL-Objekte, die Sie für eine DB benötigen, erben vom Basis-Abstract Db ... (dh DbConnection, DbDataAdapter usw.). Sie können daher eine Art von DatabaseManager-Klasse schreiben, die bei der Instanziierung wissen muss, ob Sie mit SQL oder Sql Ce arbeiten. Von diesem Punkt an gehen Sie dann nur noch mit den Basisklassenobjekten (DbConnection etc ..) um. Auf diese Weise müssen Sie Ihre Manager-Klasse nur einmal ändern.

Ein weiterer Pluspunkt auf diese Weise ist, wenn Sie später entscheiden, zu einem anderen Anbieter insgesamt zu wechseln, nicht viel Code geändert werden muss.

4

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 bei der Datendatei für SQL Compact, zum Beispiel Punkt: "Data Source=urData.sdf;Persist Security Info=False;". Mehr examples here.

Dieser Link wird erklären, was differences there are between SQL Server and SQL Compact, da es nicht identisch ist.

+0

Danke für die zusätzlichen Informationen zu den Dialektunterschieden, das ist nützlich. Ich denke, der Beispielcode wird auch funktionieren, ist aber nicht ganz so sauber (mit Verweis auf CE-Verbindungstypen), um explizite Klassenreferenzen zu vermeiden und DbProvider-Factories zu verwenden und stattdessen den Verbindungstyp mit der Konfiguration zu verwalten (gemäß der ausgewählten Antwort)). – TygerKrash