2010-09-13 116 views
5

我在* .sdf文件中有數據庫(緊湊型sql服務器)。 我將一個簡潔的框架項目轉換爲一個普通的pc項目,出於某種原因,使用相同的代碼和相同的* .sdf文件引發了以下異常: 「文件名無效。請檢查文件名數據庫「sql連接字符串問題

奇怪的是,在我的電腦 - 子字符串」文件:\「被添加到我原來的連接字符串,這可能是爲什麼拋出異常。 當我在調試模式中刪除「file:\」子字符串時,在運行時,不會拋出異常。

爲什麼添加了這個子字符串?它從何而來?我該如何解決這個問題?

最近我發現可能與app.config文件丟失的事實有一些聯繫。 這仍然不能解釋原始連接字符串是如何存在的,只能用它添加的子字符串。

請幫忙。 由於事先

+0

sdf文件是本地的嗎?在子文件夾中?它在哪裏?你能舉一個你連接字符串的例子嗎? – curtisk 2010-09-13 12:56:51

+0

是的,它是本地的。 它位於「C:\ solutionname \ projectname \ bin \ debug \ sdfname.sdf」 連接字符串:「file:\\ C:\\ solutionname \\ projectname \\ bin \\ debug \\ sdfname.sdf 「 – George 2010-09-13 13:19:55

回答

0

由於Windows CE沒有一個「當前目錄」,實現通常獲得當前正在運行的程序集的位置的目錄看在。在一個桌面上,通過Assembly.GetExecutingAssembly().GetName().CodeBase返回的字符串包括方案前綴。

+0

什麼是Assembly.GetexecutingAssembly()。GetName()。CodeBase? 以及如何解決該問題? – George 2010-09-13 15:37:31

+0

如果輸入「sdfname.sdf」,則打開該文件的進程將不得不將其解析爲「c:\ somefolder \ sdfname.sdf」。在Windows機器上,開發人員通常假定該文件位於當前文件夾中,但由於Windows CE設計沒有「當前文件夾」,因此CE開發人員通常使用Assembly的路徑。 – 2010-09-14 10:01:18

+0

在Windows CE上,此函數返回一個可用於未修改的路徑以打開文件,而在完整框架中添加方案前綴(file:\\\)。我不知道相對於絕對的這種轉換髮生在哪裏,如果它在第三方庫中,您可以看到它們是否具有可以使用的完整框架版本而不是CF版本? – 2010-09-14 10:06:46

1

我不明白你爲什麼需要「file://」。它應該沒有那麼好。肯定它看起來不對,你有文件:\而不是文件://

+0

也許我沒有正確解釋自己。 「file:\」前綴是自動添加的 - 我沒有添加它。這就是爲什麼拋出異常(而不是由框架)。 我不知道爲什麼會發生這種情況。 我希望找到該前綴的來源,並理解爲什麼會發生這種情況,但現在我甚至會在調用引發異常的函數之前直接在運行時刪除它。不幸的是,連接字符串是私人的,因此 - 我無法訪問它。 – George 2010-09-14 09:00:51

+0

你確實說得很清楚,我只是沒有正確閱讀。你的連接字符串應該是:「Data Source = c:\ db.sdf」。 – Bryan 2010-09-15 04:47:30