2010-09-13 27 views
5

* .sdf dosyasında Database (compact sql server) var. Kompakt bir çerçeve projesini düzenli bir pc projesine dönüştürdüm ve bir nedenle, aynı kodla ve aynı * .sdf dosyasında şu istisna atılmış: "dosya adı geçerli değil. veritabanı "sql bağlantı dizesi sorunu

tuhaf olan şey, Pc'mde - özgün dosya dizgisine" dosya: \ "alt dizesi eklenmiş olması ve bu durumun istisnanın neden atıldığının muhtemel olmasıdır. hata ayıklama modu sırasında "file: \" alt dizesini kaldırdığımda, çalışma zamanında istisna atılmaz.

Bu alt dize neden eklenmiştir? nereden geliyor? ve bu sorunu nasıl çözebilirim? Son zamanlarda, app.config dosyasının eksik olduğu ile ilgili bazı bağlantıların olabileceğini keşfettim. Bu, orijinal bağlantı dizesinin yalnızca eklenmiş olan alt dizgeyle birlikte nasıl olduğunu açıklamıyor.

Lütfen

Yardım edin. Pencereler CE yana peşin

+0

Sdf dosyası yerel mi? Bir alt klasörde mi? Nerede? Bağlantı dizinizin neye benzediğine dair bir örnek verebilir misiniz? – curtisk

+0

Evet, yereldir. "C: \ solutionname \ projectname \ bin \ debug \ sdfname.sdf" bağlantı dizesinde bulunur: "file: \\ C: \\ solutionname \\ projectname \\ bin \\ debug \\ sdfname.sdf " – George

cevap

0

yılında sayesinde bir dizin bakmaya olarak uygulamalar genellikle şu anda çalışan derleme konumunu almak, bir "geçerli dizini" sahip değil. Bir Masaüstünde, Assembly.GetExecutingAssembly().GetName().CodeBase tarafından döndürülen dize o içerir düzeni öneki .

+0

Assembly.GetexecutingAssembly(). GetName(). CodeBase nedir? ve bu sorunu nasıl düzeltirim? – George

+0

"sdfname.sdf" ifadesini girerseniz, bu dosyayı açan işlemin örneğin "c: \ somefolder \ sdfname.sdf" adresine çözülmesi gerekir. Windows makinelerinde geliştiriciler genellikle dosyanın geçerli klasörde olduğunu varsayarlar, ancak Windows CE'nin bir "geçerli klasör" içermediğinden, CE geliştiricileri genellikle Meclis yolunu kullanır. –

+0

Windows CE'da bu işlev, bir dosyayı açmak için değiştirilmemiş olarak kullanabileceğiniz bir yol döndürürken, tam çerçeve üzerinde bir şema öneki (dosya: \\\) eklenir. Göreceli olarak mutlak olan bu dönüşümün nerede olduğunu bilmiyorum, eğer üçüncü parti bir kütüphanede varsa, CF versiyonu yerine kullanabileceğiniz tam bir çerçeve sürümüne sahip olup olmadığınızı görebilirdiniz? –

1

Neden "file: //" ye ihtiyacın olduğunu anlamıyorum. Bu olmadan gayet iyi çalışmalı. Herhalde dosya dosyanız yerine sahip olduğunuzda yanlış görünüyor: \ dosya: //

+0

belki kendimi doğru bir şekilde açıklamıyordum .. "file: \" prefix kendiliğinden kendiliğinden eklendi - ben eklemedim. Bu yüzden istisna atılır (çerçeve tarafından değil). Bunun neden olduğu hakkında hiçbir fikrim yok. Bu önekin kaynağını bulmak ve bunun neden olduğunu anlamak isterdim, ancak şu anda istisna atar işlevini çağırmadan önce doğrudan çalışma zamanında onu kaldırdığım için bile eyerim. Ne yazık ki bağlantı dizesi özel ve buna bağlı olarak - ona erişimim yok. – George

+0

Açık yaptın, sadece düzgün okumadım. Bağlantı dizeniz şöyle olmalıdır: "Veri Kaynağı = c: \ db.sdf". – Bryan