WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

VS2015 でユーザーインスタンス利用

by WebSurfer 2018年9月24日 13:57

SQL Server Express のユーザーインスタンスを利用して、Visual Studio Community 2015 の TableAdapter 構成ウィザードで型付 DataSet + TableAdapter を自動生成する際の注意点を書いておきます。

Visual Studio 2010 Professional と同じ手順で作業すると、作業の過程で以下のように、"ファイル xxx.mdf の自動的に名前が付けられたデータベースをアタッチできませんでした。同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、UNC 共有に配置されています。" というエラーが出て先に進めません。

エラーメッセージ

原因はここまでの作業で生成された接続文字列に User Instance=True が付与されないからです。

接続文字列には AttachDbFilename でアタッチする .mdf ファイルは指定されるのですが、その場合 User Instance=True で明示的にユーザーインスタンスを使うようにする必要があるようです。

(想像ですが、User Instance=True が付与されていないので、既定の(または名前付き)インスタンスにアタッチしようとして、権限の問題で失敗していると思われます。先の記事「DB のアタッチ」参照)

TableAdapter 構成ウィザードで作業を進めていく際、「接続の追加」ダイアログで[詳細設定(V)...]ボタンをクリックすると「詳細プロパティ」ダイアログが表示されますので、そこでユーザーインスタンスを使用するように設定する必要があります。

詳細プロパティ

「詳細プロパティ」で[Data Source]を LocalDB から SQL Server Express に変更するところは気が付きましたが、もう一つ[User Instance]がデフォルトで False になっていて、これを True に変更する必要があることに気が付きませんでした。

ちなみに、Visual Studio 2010 Professional では「詳細プロパティ」の[User Instance]は True に設定されています。

「詳細プロパティ」の設定後、先に進んで TableAdapter 構成ウィザードに戻ったときに接続文字列を確認できます。

接続文字列

上の画像のように User Instance=True となっていれば OK です。後は従前の手順で進めていけば問題なく型付 DataSet + TableAdapter が完成するはずです。

ユーザーインスタンスはすでに非推奨になっていて、最近の開発には LocalDB を利用するので、このような問題に悩むケースはほとんどなさそうですが、忘れないよう備忘録として残しておくことにしました。(笑)

Tags: ,

ADO.NET

SQL Server Express 更新時のトラブル

by WebSurfer 2011年12月17日 16:01

SQL Server 2008 Express を利用していますが、Service Pack を適用すると、毎回以下のようなエラーメッセージが表示され、接続できなくなるというトラブルに悩まされてきました。

"ユーザー インスタンスのプロセスを起動中のエラーにより、Sql Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。"

次に Service Pack を適用する際また同じ問題が出ると思いますが、そのころには解決策を忘れてしまうので、自分のブログに備忘録として書いておきます。

SQL Server Express のデータファイル

SQL Server Express は上の画像に表示された mdf, ldf ファイルを自動的に作ります。具体的なことは分かりませんが、Service Pack の適用によってこれらのファイルとの整合が取れなくなることが原因のようです。これらを全部削除してしまえば問題は出なくなります。

Vista の場合、フォルダの場所は以下の通りです。

C:\Users\アカウント名\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

ユーザーインスタンスを使わない(接続文字列の User Instance を False にする)ことでも問題を回避できるそうです。ただ、それは解決にはなっていないですよね。

Tags:

SQL Server

ユーザーインスタンス

by WebSurfer 2010年9月14日 21:54

Visual Studio での SQL Server 接続の設定

将来的には無くなる機能だそうですが、SQL Server 2005/2008 Express Edition には、Visual Studio と連携しての DB の取り扱いに便利な「ユーザーインスタンス」という機能があります。(RANU - Run As Normal User とも呼ばれています)

(2014/6/11 追記:ユーザーインスタンスが非推奨になり、その代わりに SQL Server 2012/2014 Express LocalDB の使用が推奨されています。Visual Studio 2012, SQL Server Express 2012 以降では LocalDB が使用できますので、そちらを使用することをお勧めします。)

左の画像は、Visual Studio 2010 を利用して、Web サイトプロジェクトのソリューションエクスプローラで App_Data フォルダに SQL Server データベース (Database2.mdf) を追加し、サーバーエクスプローラで Database2.mdf を右クリックして「接続の変更」で内容を見たところです。

画像をクリックすると拡大画像が表示されます。データソース(S) が「Microsoft SQL Server データベースファイル (SqlClient)」となっていますが、これがユーザーインスタンスを利用した接続になります。

この「ユーザーインスタンス」と、実際の運用環境で使用する「既定のインスタンス」とはかなり違います。自分なりに簡単に違いをまとめたので、忘れないように書いておきます。

(1) 既定のインスタンス

SQL Server が起動された時点から存在するインスタンスで、実際の運用環境ではこれに接続して DB を利用します。

ただしこれを利用するには、事前に、かつ静的に、目的の DB をデーターベースエンジンにアタッチし、ログインアカウントを設定し、DB に対するアクセス権の設定などを行う必要があります。

他に「名前つきインスタンス」というのもありますが、特定の名前がついているだけで「既定のインスタンス」と同じです(細かいことを言えば違いますが、とりあえずここではそう思っていいです)。

(2) ユーザーインスタンス

SqlConnection.Open で自動的に PC にログインしているユーザー専用のインスタンスを作り(既定のインスタンスとは別に)、接続文字列で指定した DB を動的にアタッチし、そのユーザーに DB 所有者の特権を与える・・・という感じです。

それゆえアタッチとかログインなどの設定をしなくても、Access と同様に SQL Server に接続して DB を扱えるようになります。

ただし、リモート接続は不可とか、レプリケーションは無効とか、SQL Server 認証をサポートしないなど制約が多いので、Access のように使いたいという特殊なケースを除いては、これを実際に運用に使うことはありません。

ユーザーインスタンスの詳しい説明は MSDN ライブラリ「管理者以外のユーザーのためのユーザー インスタンス」にありますので、そちらも見てください。

Visual Studio を使って開発する場合、特に Express Edition では Visual Studio からは「ユーザーインスタンス」にしか接続できないという制限があります。ですから、MSDN フォーラムの書き込みなどを見ていると、アタッチとか、ログインアカウントの設定などは知らない人も多いようです。

また、自サーバー構築で、開発環境をそのままサーバーに導入して、接続文字列もそのまま使って、ユーザーインスタンスに接続している人もいるようです。

Tags:

SQL Server

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年4月  >>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar