3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(ADO.Net)パスワード付mdbにアクセスする際の ConnectionString の書式

いつも忘れてしまうのでメモ。

.NetからDataSetを使わずに接続型でパスワード付mdbにアクセスするための方法です。

Try

 

Dim cn As New OleDb.OleDbConnection()

'接続文字列設定

cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\a.mdb;Persist Security Info=False;User ID=Admin;Jet OLEDB:Database Password=1234"

'接続テスト

cn.Open()

cn.Close()

 

Catch ex As OleDb.OleDbException

MessageBox.Show(ex.Message)

End Try

接続文字列の詳細は下記のようになります。

Provider=Microsoft.Jet.OLEDB.4.0 固定。

Data Source=mdbファイルへのフルパス

Persist Security Info=TrueかFalse 無くてもいいみたい。

User ID=アクセスの際に使用するユーザ名(普通はadmin(?))

Jet OLEDB:Database Password=DBのパスワード

Persist Security InfoはMSDNによると下記のように説明されています。

接続文字列で Persist Security Info キーワードを true または yes に設定すると、ユーザー ID やパスワードなどのセキュリティ関連情報は、接続を開いた後にその接続から取得できます。接続時にユーザー ID とパスワードを渡す必要がある場合は、Persist Security Info を false または no に設定しておき、ユーザー ID とパスワードを使用して接続を開いた後、そうした情報が破棄されるようにするのが最も安全です。このことは、信頼できないソースへの接続を開いたままにしたり、接続情報をディスクに保持したりしている場合に特に重要です。Persist Security Info を false のままにしておけば、信頼されていないソースは接続用のセキュリティ関連情報にアクセスできず、セキュリティ関連情報が接続文字列情報と共にディスクに保存されることもありません。既定では、Persist Security Info は false に設定されています。

まあ、Persist Security Infoはなくてもいいみたいなのでそんなにシビアになる必要はなさそうです。

知ってる人には大したことないのでしょうが、ハマったのはパスワードの設定でした。

ネットで探していると下記のように"Password"だけの指定例を示してるとこもあるのですが、それではつながりません。

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\a.mdb;User ID=Admin;Password=1234

この場合、「アプリケーションを起動できません。システム データベースが存在しないか、またはほかのユーザーが排他的にシステム データベースを開いています。」という例外が発生します。

(EZ-NET パスワードで保護されたデータベースを作成する等を見るところ、VBScript とかでADOからつなぐときはPasswordでOKらしいですね。)

ということで、パスワードの設定にはJet OLEDB:Database Passwordを使いましょう。

(ちなみに、パスワードなしの場合は Provider と Data Source の設定だけでOKです。)

参考:

【VB.NET】VB.NETからパスワード付きのAccessファイルに接続する