by WebSurfer
23. September 2010 13:37
Microsoft SQL Server Database Publishing Wizard という、SQL Server データベース(スキーマとデータの両方) を共有ホスティングサービスのサーバなどに移設するためのスクリプトを自動生成してくれる便利なツールがあります。
このツールは Visual Studio に統合できるようになっていて、開発環境で App_Data フォルダに作ってユーザーインスタンスに接続しているデータベースにも対応できます。
Visual Studio 2008 にはこのツールは同梱されておらず、CodePlex の サイト からダウンロードしてインストールしましたが、Visual Studio 2010 では同梱されていました。
上の写真のように、サーバーエクスプローラの mdf ファイルを右クリックし、出てきたコンテキストメニューで Publish to Provider... をクリックするとウィザードが起動します。後はウィザードに従って進めていくだけですが、一応ポイントを書いておきます。
理由は分かりませんが、Visual Studio をデータベースに接続したまま進めるとエラーになることがあります。その場合はサーバーエクスプローラで切断してから進めてください。
うまくいけば「データベースの選択」画面が表示されます。Visual Studio のサーバーエクスプローラに表示されているデータベース以外に、SQL Server にアタッチされているデータベースも表示されます。
「出力先の選択」画面でスクリプトファイルの名前と保存先を指定します。下の写真はデフォルト設定のままです。直接、ホスティングサービスのサーバーにパブリッシュできるオプションもあるようですが、やり方が分かりません。(笑)
「パブリッシング オプションの選択」画面で、詳細設定オプションを選択します。パブリッシュするデータの型は、スキーマのみ、スキーマとデータ、データのみ、の 3 種類の中から選択できます。データを含めると、データが多い場合はスクリプトファイルのサイズがとんでもなく大きくなりますので、データが必要なければ「スキーマのみ」にしておいてください。
以上で、指定したフォルダに指定したファイル名でスクリプトファイルが作成されます。下の写真は、作成されたスクリプトファイルを SQL Server Management Studio で開いたものです。ホスティングサービスの SQL Server でこのスクリプトを実行すれば、開発環境で作ったデーターベースと同じものが出来上がります。ちなみに、自分の場合スクリプトの実行は、ホスティングサービスが MyLittleAdmin を提供していますので、それを利用しています。
by WebSurfer
16. September 2010 16:07
今回は、Visual Studio の Express 版を使ってのアプリ開発には SQL Server Management Studio(以下 Management Studio)は不要という話です。
というより、下手に使うと予期しない問題の解決にハマってしまい、無駄な時間を費やすことになりかねないので、手を出さないほうがいいですというお勧めです。(笑)
何故 Management Studio が不要かといえば、Visual Studio の Express 版は既定のインスタンスへの接続をサポートしていないからです。
Management Studio で、ウィザードを使ってデフォルト設定のままデータベースを作成すると、Instid\MSSQL\data フォルダに DB(mdf ファイル)が作成され、アタッチ済みの状態になるはずです。
即ち、DB を利用するためには、既定のインスタンスへの接続が必要となります。アタッチされた DB に対して、ユーザーインスタンスを利用した接続はできません。
その DB に、Visual Studio の Express 版を接続しようとすると、既定のインスタンスへの接続はサポートされておらず、ユーザーインスタンスは使えないわけですから、うまくいきません。それに気がつかないと、解決できないことにハマってしまい、無駄な時間を費やすことになるというわけです。
Visual Studio Professional 版は既定のインスタンスに接続できるので、不要とは言い切れません。でも、あまり使う機会はないような気がします。実際、自分は使っていません。
アプリ開発に必要な Management Studio の機能のほとんどが Visual Studio(Express 版を含む) に実装されています。ソリューションエクスプローラを使って SQL Server DB を新規作成できます。データベースエクスプローラを操作して、テーブルやストアドプロシージャの作成も可能です。
という訳で、経験浅い自分の場合ではありますが、今まで Management Studio がなくてアプリ開発に困った記憶はないです。
ただし、アプリ開発時ではなくて、実際の運用で既定のインスタンスへの接続が主になる場合は話は別です。
以前、自サーバーを構築した際の経験では、DB 生成クエリの実行、アタッチ/デタッチ、ログインアカウントの設定、ユーザーの権限の設定等に Management Studio は必須のツールでした。GUI で直感的に操作できるので、コマンドを覚える気のない自分には特にそうです。
by WebSurfer
15. September 2010 22:13
ASP.NET ベースの Web アプリケーションの開発時に Visual Studio を SQL Server に接続する話です。
(2014/6/11 追記:以下は Visual Studio 2010 までの話です。ユーザーインスタンスが非推奨になり、開発用には、ユーザーインスタンスに代えて、SQL Server 2012/2014 Express LocalDB の使用��推奨されています。Visual Studio 2012 以降ではユーザーインスタンスではなく LocalDB に接続することになりますので注意してください)
Visual Studio のサーバーエクスプローラ(VWD Express 版はデータベースエクスプローラ)を開いてデータ接続のノードを右クリックし、「接続の追加」メニューを表示します。その中の「データソース(S):」の「変更」ボタンをクリックすると、下のような選択画面が表示されます。
SQL Server を DB に利用する場合、選択は以下のとおりとなります。なお、VWD Express, VC# Express, VB Express では既定のインスタンスへの接続ができない(上の画像で「Microsoft SQL Server」のメニューがない)こと、SQL Server Express Edition 以外にはユーザーインスタンスの機能がないことに注意してください。
-
App_Data フォルダに置いた DB のユーザーインスタンスに接続 ==> 「Microsoft SQL Server データベースファイル」を選択。
-
ローカルまたはリモート SQL Server DB の既定のインスタンス(または名前つきインスタンス)に接続 ==> 「Microsoft SQL Server」を選択。
自分の場合、開発環境ではほぼ 100% 前者を利用しています。アタッチとかログインなどの設定をしなくても、Access と同様に簡単に SQL Server に接続して DB を扱えるようになりますので。
後者は、SQL Server の知識をある程度得てから、必要があれば利用する程度にした方がよさそうです。Visual Studio のウィザードを使うと、DB の作成からアクセスの設定まで簡単にできてしまいますが、中で何が起こっているか理解していないままやると、後で収拾がつかなくなる恐れがありますので。← 経験談(笑)
SQL Server Express Edition の場合、自動生成される接続文字列は以下のようになります。ご覧のとおり、前者はユーザーインスタンスが有効になっています。(注:SQL Server の Express 版をデフォルト設定でインストールすると「名前つきインスタンス」になります。以下の接続文字列で SQLEXPRESS は名前つきインスタンスの名前です)
Microsoft SQL Server データベース ファイル
---------------------------------------
Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\<mdf ファイル名>;
Integrated Security=True;
Connect Timeout=30;
User Instance=True
Microsoft SQL Server
--------------------
Data Source=.\SQLEXPRESS;
Initial Catalog=<データベース名>;
Integrated Security=True
なお、ここに書いたことは、Visual Studio から DB への接続の話であり、アプリケーションから DB への接続とは違うことに注意してください。
アプリケーションから SQL Server の既定のインスタンスへの接続は、接続文字列の変更と SQL Server 側の設定でどのようにでもできます。