C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: MDBを読取り専用で開く方法(Silverlight)


(過去ログ 103 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■61365 / inTopicNo.1)  MDBを読取り専用で開く方法(Silverlight)
  
□投稿者/ asuka (46回)-(2011/08/10(Wed) 15:05:19)

分類:[.NET 全般] 

いつもお世話になっております。

クライアント側からWebサービス経由でサーバ上のクラスライブラリが、サーバ上のmdbファイルにアクセスし、結果をクライアントに返すシステムを構築しています。

Aクライアントがmdbを参照中(ldbがある状態:この状態を作るのは難しいのでデバッグ状態でサーバ上でAクライアントの動作を行いldbがある状態実現)、Bクライアントがmdbを参照すると、

「ファイルを開くことが出来ませんでした。ほかのユーザが排他的に開いているか、データを読み取る権限ありません。」

と例外が発生します。



mdbへのアクセスはMicrosoft Enterprise Library 5.0というツールを介しておりますが、

SQLClientでの接続をラッパしたような感じですので、SQLClientとほぼ同じ動作だと思って頂いてよいかと思います。(ダメでしたらすみません)

そこで、SQLClientで、mdbへ排他せずにアクセスする方法を調べたのですが、分からない状況です。

ご存じの方がおられれば読取り専用で開く方法をご教授頂けると幸いでせう。
(ADOではありません。)



もう一つ試したことは、手動でldbのアクセス権にEveryOneを追加してフルコントロールを付与しました。

結果、開けるのですが、あまり好ましいやり方だとは思いませんので、他に解決策などあればあわせて教えて頂ければ幸いです。

よろしくお願いします。m(__)m
---
VS2010
Silverlight4
C#

引用返信 編集キー/
■61372 / inTopicNo.2)  Re[1]: MDBを読取り専用で開く方法(Silverlight)
□投稿者/ くり太郎 (41回)-(2011/08/10(Wed) 19:07:42)
くり太郎 さんの Web サイト
本来であれば、mdb ファイルはマルチタスクで使用する前提で作られてはいないので、もう少し本格的な DBMS に移行することを検討した方が良いのですが、なかなかそういう訳にもいかないですよね。

自分は、型付き DataSet しか使ったのことがなくて、Microsoft Enterprise Library 5.0 は使ったことがないので外しているかもしれませんが・・・
データベースファイルを開く際のコネクションのオプションなどで通常は指定できると思います。
引用返信 編集キー/
■61373 / inTopicNo.3)  Re[2]: MDBを読取り専用で開く方法(Silverlight)
□投稿者/ 魔界の仮面弁士 (2302回)-(2011/08/10(Wed) 19:11:08)
No61372 (くり太郎 さん) に返信
> Microsoft Enterprise Library 5.0 は使ったことがないので外しているかもしれませんが・・・
同じく。

> データベースファイルを開く際のコネクションのオプションなどで通常は指定できると思います。
OleDbConnection だと、たしかこんな感じ。


const int adModeUnknown        = 0;
const int adModeRead           = 1;   //読み取り専用で開く
const int adModeWrite          = 2;   //書き込み専用で開く
const int adModeReadWrite      = 3;   //読み取り及び書き込みの両方を行えるように開く
const int adModeShareDenyRead  = 4;   //他のユーザが読み取りだけ行えるように開く
const int adModeShareDenyWrite = 8;   //他のユーザが書き込みだけ行えるように開く
const int adModeShareExclusive = 12;  //他のユーザがデータベースを開くことができないようにする
const int adModeShareDenyNone  = 16;  //他のユーザが読み書きできるように共有モードで開く

var ob = new OleDbConnectionStringBuilder();
ob.Provider = "Microsoft.JET.OLEDB.4.0";
ob.DataSource = filePath;
ob["Mode"] = 上記定数;

var con = new leDbConnection(ob.ConnectionString);
con.Open();
/* **** */
con.Close();

引用返信 編集キー/
■61389 / inTopicNo.4)  Re[3]: MDBを読取り専用で開く方法(Silverlight)
□投稿者/ asuka (47回)-(2011/08/11(Thu) 11:34:18)
2011/08/11(Thu) 11:34:46 編集(投稿者)

くり太郎さん、魔界の仮面弁士さん

ご回答ありがとうございます。

どう探してもSQLClientのプロパティで設定出来る箇所が見当たらなかった次第なのですが、

下記のサイトを見つけました。
http://mgw.hatena.ne.jp/?http://www.geocities.jp/i_love_balard/myhome/dnet/oledbmode.html


魔界の仮面弁士さんが提示してくださったModeが、コネクションストリングで指定出来るようでした。

"Mode = Read"とし、早速試しましたところ、例外も発生せず接続は可能でクエリも発行できたのですが、

以前症状は変わらずじまいでした。

推測ですが、どうやらこのオプションは権限があった上での指定のような気がします。



結局、Silverlightクライアントユーザが使用するということで、mdbを格納しているフォルダのセキュリティにIISユーザを加え、アクセス権を設定することでひとまず解決させました。

頂いたアドバイスを元になんとか動作させることが出来ました。

ありがとうございました。
m(__)m

解決済み
引用返信 編集キー/
■61391 / inTopicNo.5)  Re[4]: MDBを読取り専用で開く方法(Silverlight)
□投稿者/ shu (935回)-(2011/08/11(Thu) 12:14:45)
No61389 (asuka さん) に返信


> 結局、Silverlightクライアントユーザが使用するということで、mdbを格納しているフォルダのセキュリティにIISユーザを加え、アクセス権を設定することでひとまず解決させました。
ファイルアクセス権限がなかったのですね。
mdbはファイルアクセスを直接行うことにより読み書きをするのでファイルアクセス権限がなければ読むことは出来ないですよ。
解決済み
引用返信 編集キー/
■61418 / inTopicNo.6)  Re[5]: MDBを読取り専用で開く方法(Silverlight)
□投稿者/ asuka (48回)-(2011/08/12(Fri) 09:36:52)
2011/08/12(Fri) 11:54:14 編集(投稿者)

shuさん

追加のご教授ありがとうございます。

>>結局、Silverlightクライアントユーザが使用するということで、mdbを格納しているフォルダのセキュリティにIISユーザを加え、アクセス権を設定することでひとまず解決させました。
> ファイルアクセス権限がなかったのですね。
> mdbはファイルアクセスを直接行うことにより読み書きをするのでファイルアクセス権限がなければ読むことは出来ないですよ。

普段はmdbへのアクセスをWebシステムではなく、ローカルで触ることが多かったので、

特にアクセス権限を考えずにいじれていたので意識しておりませんでした。

この機に肝に銘じておくようにします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -