2013-12-09 11 views
5

MSDNよるHow do I share a SQL Server CE database file (.sdf) for multiple processes?SQL CEファイル共有違反ローカルマシン上

に疑問を参照すると、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つの異なるアプリケーション/プロセスがあります1つのサービス.....とデータベースにサービスを話す....接続はプロセスと同じではありません。また、Microsoft Access 16bitは255の接続をサポートしていると言っていたが、それはポピーだった。彼らは後でそれを合理的な10-15に改訂したと思う。そして、あなたのウェブアプリケーション(またはそれに類するもの)であなたは素早く接続を開いて閉じます。彼らは生きていないし、残っていません。しかし、私はこのファイルにアクセスする2つの異なるプロセスの代わりに、WCF(またはWebApi)ルートについて考えるでしょう... – granadaCoder

答えて

4

を使用していたが、あなたは複数のプロセスからのSQL CEファイルを開こうとするべきではありません。 SQL CE 4.0では複数の作家が参加することができます。複数の作家が同じレコードに書き込むことは決してないと思いますが、これは目隠しをしている限り、火のついたチェーンソーをゆがめても安全だと考えるようなものです。

SQL CEは、ライブデータファイル内の変更されたバイトを変更します。これを複数のプロセスから確実に行うことはできません。あなたはできると思いますが、できません。あなたが引用した質問にaccepted answerを読んでください。 SQL Expressのようなサービス指向のデータベースを使用してください。

+0

しかし、http://technet.microsoft.com/en-us/library/ms171817.aspxによると "Read Write"モードは "複数のプロセスがデータベースを開いて変更できるようにする"ということはできないのですか? – Dennis

+1

私は、あなたが求めていることをやるのがいかに難しいかを理解しているとは思わない。効果的にSQL Server Expressを自分で作成する必要があります。微妙な間違いを犯してデータを破壊し、トレースを残さないことは非常に簡単です。このルートを下ってはいけません、SQL Expressを使用してください。これはSQL CEのために設計されたものです。 –

0

私の場合、ファイルが何らかの形でロックされていました。私はTFSをオンラインで使用していましたが、sdfファイルはロック/編集モードになっていましたが、ファイルをチェックアウトして、ファイル属性から読み取り専用フラグを削除しました。

これを修正するには、tfsソースコントロールエクスプローラを開いてロックを解除する必要がありました。

ファイルがロックされていないことを確認してください。

注:これは古い投稿ですが、私はこの問題に直面している誰かに役立つようにこの回答を追加するだけです。