2012-10-25 112 views
1

當我連接到.sdf文件時,出現"Permission denied"異常。Win XP上的SQL Server CE權限被拒絕

我正在使用此連接字符串。

connection string="Data Source=|DataDirectory|\DB.sdf;Password='something';Mode = Read Only;Temp Path= Environment.GetFolderPath(Environment.SpecialFolder.Templates);Persist Security Info=True"" providerName="System.Data.EntityClient" /> 

這是在Win 7的工作正常,但當我在Win XP上運行我的應用程序,它返回

權限被拒絕

例外

我嘗試了不同的地址對於臨時文件但它仍然失敗。所有這些選項都是真實的

  1. 數據庫文件的路徑存在XP的機器
  2. 我有權在給定 目錄
  3. 我提供正確的密碼,以創建一個臨時文件上。

這個問題只是發生在數據庫連接字符串設置爲只讀only.i找到了一些解決方案,但我不能使用它們:

解決方案1:

這裏是在這個舀。當我們將SDF文件從XP移動到Vista時,由於NLS版本發生變化,我們嘗試以 讀寫模式打開文件,以重寫索引(如果存在)。從XP到Vista的第一次開放時,這種情況只發生在 。因此,一個簡單的工作 左右是暫時將文件更改爲讀寫模式 在Vista上打開它並將其恢復爲只讀。

我無法使用此解決方案,因爲我的應用程序是從DVD運行的。具有3個SDF文件,一個用於XP/Server 2003和一個爲Vista /服務器 2008/Win7和一個勝8

這也:

解決方案2可怕的,因爲我沒有應用程序DVD上的可用空間來做到這一點。

任何人都有一個好主意來解決這個問題。

+0

除非您操作DataDirectory,否則數據庫將駐留在Program Files文件夾中,該文件夾僅由普通用戶默認讀取。 – ErikEJ

+0

@ErikEJ:我嘗試了其他驅動器的不同文件夾,但不工作 – KF2

回答

0

將文件複製到可以寫入的地方,並從文件中刪除只讀屬性。連接到這個文件。

Environment.SpecialFolder可以調用SpecialFolder.LocalApplicationData來獲得合適的位置。

Path.GetTempPath在這方面也可能有用。

+0

由於某些原因,我無法將我的數據庫複製到目標PC,但您知道Sq-lite解決此問題嗎? – KF2

+0

@irsog您可以[[打開]](http://www.sqlite.org/c3ref/open.html)SQLite數據庫以['SQLITE_OPEN_READONLY'](http://www.sqlite .org/c3ref/c_open_autoproxy.html)標誌,但是否適合您的情況將由您決定。 –

+0

困惑在這裏。它是SQLite還是SQL Server CE?這是兩件完全不同的事情。 – AngryHacker

0

您需要在DVD上有2個數據庫文件副本,一個用於XP/Server 2003,另一個用於Vista和更高版本。或者在應用程序首次啓動時將數據庫複製到可寫位置。同樣的問題適用於SQL Server Compact 4.0

+0

:正如我在我的問題中所說的,我的數據庫大小約爲1.5 GB,因爲它的大小有限,所以我不能擁有2個應用程序,第二個解決方案對我來說也不適用,因爲我的應用程序運行的是DVD。 – KF2

+0

:你知道Sq-lite有相同的問題嗎? – KF2

+0

我不明白爲什麼第二個解決方案不起作用,即使應用程序從DVD運行,它也可以使用硬盤上的數據?我不知道關於sqlite – ErikEJ