2013-12-09 44 views
5

參考質疑How do I share a SQL Server CE database file (.sdf) for multiple processes?SQL CE文件共享衝突多進程本地機器

根據MSDN上,SQL CE允許單個數據庫256個併發連接。

但即使在同一臺機器上,當我打開相同的數據庫但面對2個不同的進程(a.exe & b.exe,代碼相同)時,我面臨共享衝突錯誤。這裏似乎是什麼問題?

我所用的連接字符串

SqlCeConnection("Data Source=d:\test.sdf;Encrypt Database=True;Password=test;File Mode=read write;") 
+0

您需要連接到服務而不是併發訪問文件。不確定CE是否有服務。它們指的是Web場景中的256個連接。 – Paparazzi

+0

@Blam你能告訴我一些示例代碼嗎?我試圖讓2個進程訪問相同的數據庫(讀寫) – Dennis

+0

您可能需要將數據...作爲服務(WebApi的WCF)公開......並讓2個不同的應用程序/進程對話一個服務.....並且有服務與數據庫交談....連接與進程不同。另外,Microsoft Access 16bit表示它支持255個連接,但那是poppy-cock。我認爲他們後來修改爲10-15合理。並認爲..在一個web應用程序(或類似的)你很快打開和關閉連接..他們不生活和流連忘返。但我會考慮WCF(或WebApi)路線,而不是2個不同的進程訪問此文件........ – granadaCoder

回答

4

這是不是你想要聽到的答案,但你永遠不應該嘗試從多個進程打開SQL CE文件。是的,我知道,SQL CE 4.0允許多個編寫者,並且你認爲你永遠不會有多個編寫者寫入相同的記錄,但是這就好像認爲只要你蒙着眼罩就可以安全地玩轉火紅的鏈鋸。

SQL CE修改實時數據文件中已更改的字節。您無法可靠地從多個進程執行此操作。你認爲你可以,但你不能。閱讀你所引用的問題accepted answer;使用SQL Express等面向服務的數據庫。

+0

但根據http://technet.microsoft.com/en-us/library/ms171817.aspx「讀寫」模式「允許多個進程打開和修改數據庫」,這不可能嗎? – Dennis

+1

我不認爲你明白你要問的是多麼困難;你將不得不自己編寫SQL Server Express。犯下微妙的錯誤很容易,它會破壞你的數據並且不留下任何痕跡。不要走這條路,使用SQL Express,這是它​​的設計目的,而SQL CE則不是。 –

0

在我的情況下,該文件被鎖定。我在線使用TFS,sdf文件處於鎖定/編輯模式,儘管我已經檢出了文件並從文件屬性中刪除了只讀標誌。

要修復它,我不得不打開tfs源代碼管理資源管理器並刪除鎖。

請確保文件未被鎖定。

注意:這是舊帖子,但我只是添加此答案,以便它可能有助於面臨此問題的人。