2009-04-27 24 views
8

Oldukça basit bir soru. SQL Server 2005 örneğinden veri okuyan bir uygulama yapıyorum. Dizüstü bilgisayarımda (SQL 2005'te bulunmayan) bazı testler yapmak istedim, bu yüzden testlerin amacı için yerel bir veritabanında değiştirmeyi düşünüyordum.SQL CE db'ye bağlanma SQLConnection

VS2008 kullanıyorum, böylece Compact Edition DB doğal bir seçim gibi görünüyordu. Bağlantı dizgimi takas etmeyi umuyordum, ama öyle görünüyor ki SqlConnection ve SqlConnection kullanarak SqlCeConnection kullanarak sadece CE veritabanına bağlanmama izin verecek. Bu şekilde, bağlantı dizesinde kullanabileceğim değiştiriciler belki de?

cevap

7

Sadece değiştirerek yapılandırma parametreleri ile aslında kullanıcı SQL CE yerine tam gelişmiş bir SQL Server çok mümkün: Değişiklik bağlantı dizesi ve mümkün olan her yerde yerine platforma özel SqlXXX ve SqlCeXXX olanların IDbXXX aile arayüzleri kullanın. Bakınız DbProviderFactories. Bununla birlikte, bu iki platformun SQL lehçelerindeki farklılıklardan haberdar olun.

+0

Tam olarak ne aradığımı teşekkürler. bir tedavi çalışır. – TygerKrash

+1

"Lehçelerde farklılıkları" vurgulayan iyi bir bağlantı biliyor musunuz? SQL Server'da bulunan desteklemeyen önemli şeyler listeleyen bir sayfa olsaydı gerçekten yararlı olurdu. – noelicus

1

Db için temel db'den DB devralması için gereken SQL ile ilgili tüm nesneler (örn. DbConnection, DbDataAdapter vb ...). Bu nedenle, Sql veya Sql Ce ile çalışıp çalışmadığınızı anlamanız gerektiğinde, bir çeşit DatabaseManager sınıfı yazabilirsiniz. Daha sonra, bu noktadan sonra sadece temel sınıf nesnelerle (DbConnection vb.) Ilgilenirsiniz. Böylelikle, her seferinde değişmeniz gereken her şey, yönetici sınıfınızın somutlaştırılmasıdır.

Bu şekilde yapmanın bir başka yolu, daha sonra başka bir sağlayıcıya geçiş yapmaya karar verirseniz, çok fazla kodun değişmesi gerekmez.

4

Evet, SQL Compact ve/veya SQL Server'ı bunun yerine temel sınıflara başvurarak kullanabilirsiniz. Örneğin: "Data Source=urData.sdf;Persist Security Info=False;":

IDbConnection Connection; 

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

bağlantı dizesi örneğin, SQL Compact için veri dosyasına işaret etmek gerekiyor. Diğer examples here.

Bu bağlantı, differences there are between SQL Server and SQL Compact'un aynı olmadığını açıklar.

+0

Lehim farklılıkları hakkında ek bilgi için teşekkürler, bu yararlı. Örnek kodun da işe yarayacağını düşünüyorum, ancak açık sınıf referanslardan kaçınmak ve DbProvider fabrikalarını kullanmak ve bunun yerine bağlantı türünü yönetmek için yapılandırmayı kullanmak (seçilen cevapta olduğu gibi) gibi oldukça temiz değil (açık referans CE bağlantı türlerine sahip olmak)). – TygerKrash

İlgili konular