2018年12月31日月曜日

SQLCE sdf ファイルを 新しい VisualStudio で

今頃、こんな投稿を上げても、如何なものか?、 とは思うのですが ... 。
そうは頻繁に行う作業ではないので、
備忘録の意味も含めて、 投稿に纏めて置きます。
SQL Server Compact 3.5 DB ファイル の 今現在での扱い方 についてです。


以下、Visual Basic 2008SP1 の SQL Server Compact 3.5 (SP1) のデータベースを、
Visual Studio 2013 (若しくは 2017)で取り扱う個人的な覚書です。


SQLite/SQL Server Compact Toolbox が別途必要ですので、それを導入してある前提で書いて行きます。
 参考: VB VS2013 と SQL Server Compact
     https://shiroyuki-mot-says.blogspot.com/2016/09/vb-sql-server-compact-on-vs2013.html


もう、直さなくても、運用で何とかなると思っていた 嘗ての成果品 に手を入れる必要が生じまして ... 。
厄介な データベース絡みの 改修 に 手を染める事となりました。
.Netframework 3.5 & SQL Compact 3.5 の組み合わせなので ... 。
冒頭の様な次第に相成りました。.


以前の Tool と違い、 sdf ファイルは SQLCE4.0 のベースにアップグレードされる様です。  記憶違いかも。.
従って、現行で、それを利用する Project or Executable File があれば、
ファイルを事前にコピーして作業して下さい。
詰まり、元ファイルは温存して下さい。
でないと、それらの挙動が可笑しくなる可能性があるからです。
  実際に、利用しているものなので、運用しながら、改修の機会を覗う事になります。.


先ず、
フォルダを用意し、ファイルをコピーして、名称を変更します。
ファイル名の最後に _MigCE4 と加えました。 xxxx_MigCE4.sdf 。
SQLCE3.5 ではなく SQLCE4.0 のものであると 容易に判別が可能な様に! です。

それでは、
一例として、 Visual Studio 2013 (English Version) で見て行きます。
              2017 も同様に行える筈ですが、私のは、VS2013 にのみ既導入なので ... 。


メニューから TOOLS > SQLite/SQL Server Compact Toolbox と進んで、開いて下さい。
上に並んだアイコンの左から4番目 Add SQL CE 4.0 Connection をクリックし、
コピーして置いたファイルを選択します。
この時点ではファイルは SQLCE3.5 のデータベース(以下 DB と省略)です。
OK Button を押すと、ファイルをアップグレードする旨の MessageBox が出ます。
元のファイルは .sdf.bak で保存され、 .sdf は 4.0 にアップグレードされます。

結果として、Toolbox に 接続された DB が現れます。
xxxx_MigCE4.sdf (Compact4.0) と表示された Table 群が見られますね。
各 Table を展開すれば、Column/Field 群が見られます。

Table を右クリックすれば、各機能が出て来ます。

DB 名 を右クリックすれば、Migrate to SQL Server の項目が現れますが、
SQL Server に接続していない状態では、選択項目は現れません。

そこで、
SQL Server の LocalDB を用意します。
Table は必要無く、器としての DB のみ作成します。  留意点は後述(脱線 に)。
Microsoft SQL Server Database File (SqlClient) を選択して Local にファイルを作成しましょう。
xxxx.mdf が指定場所に現れるのを Explorer 上から 確認して下さい。
もし、場所を間違っていれば、Server Explorer から接続を切り、登録を削除して、
ファイルを移動した後で、
再度、Server Explorer から接続し直して下さい。
Server Explorer 上で、xxxx_MigCE4.sdf と xxxx.mdf とが並んでいますね。

とりあえず、
mdf に移行して置きます。
SQLite/SQL Server Compact Toolbox に切り替えて、
xxxx_MigCE4.sdf を右クリックして、Migrate to SQL Server します。

SQLite/SQL Server Compact Toolbox からは mdf の詳細は確認出来ません。
Server Explorer に切り替えて、移行結果を確認しましょう。


これで、
xxxx.sdf / xxxx_MigCE4.sdf / xxxx.mdf と3種類の DB が出来上がります。
各々、
SQLCE3.5 / SQLCE4.0 / SQL LocalDB になります。
.Netframework は、夫々、 3.5 / 4.0 / (4.5- ?) となり、注意が必要です。
2018/12 現在、 SQLCE4 と SQL とは、相互に、移行が可能な様です。
しかし、私のは SQLCE3.5 ですし ... 。
データ構造は同じで、格納データも同じ。
DB の種類違いです。


此処迄の作業は、 単に Visual Studio IDE を開いただけ で、
特別な Solution / Project の配下ではありません。
  勿論、その配下で行っても OK ですが ... 。


ここで、
一気に、別の DB に切り替えて Project を作り直しても良いですし、
新しく Solution/Project を作っても良いですし、
将来的な移行に備えても良いです。
尚、 直ぐに、該当 Project で、データベースの種類を変えない場合、
日々、データは蓄積変更されて行きますので、
格納 DB の将来的な更新は、上記を繰り返す事になります。
  sql commmand を生成して置いて Update の手もありますが、
  DB の混乱を避ける意味で、移行し直しの方がすっきりしていると思います。
  日々の更新は並び替えを伴いますから。
    更に、LocalDB は作った IDE の Version に左右される筈なので、
    将来を考えれば、 なるべく、最新の IDE (VS) を使った方が良いのかも知れません。
    でも、留意点もありますが ... 。
但し、 mdf にデータが移行された後で、再度繰り返すと、エラーを吐くと思いますので、
Table 毎、Drop して置いてから、繰り返す必要があるでしょう。


今回の例の様に、 DB の構造を弄らずに、移行する場合、
DB 名が同じであれば、 それから自動生成される DataSet にも影響はない筈で、
単に、 Project に保存されている 接続文字列 の部分を書き換える事で、
大きな変更点無し で DB 切り替えが完了するかも知れません。

しかし、 IDE を上位に上げたのですから、他の内容にも手を入れたくなるのが人情!。
その時は、大変ですが、DB 名も新規一新し、新たに作り直したくなるのが、元気な証拠!。
うわぁ、 また、泥沼が待っているぅ~。  ;)



脱線。

SQL Compact から LocalDB に移行した場合の留意点として、
Visual Studio と SQL Server のバージョンに注意すべきが挙げられます。
LocalDB も、上位互換の筈ですが、逆は駄目です。
明確に、どのバージョンのどのインスタンス名を使うのかを頭に入れて置かないといけません。
単独の Visual Studio を使っている分には関係ないですが、
複数バージョンの場合、基本的には、バージョンが上がれば、LocalDB も異なる点に留意です。
上位の VS で作った Project は 下位の VS で使おうとすると、
DB 絡みの点から、辟易する事になるでしょう。
移行したファイルは Explorer 等からは簡単にはどのバージョンの SQL Server 用か分かりません。
混乱するのが、MSSQLLocalDB と言う名のインスタンス。
これは既導入の最新版 VS で標準的に設定されているものですが、SQL Server も導入済み最新版を使います。
これで作った mdf に 移行 してしまうと、 古い VS では扱えないものが生まれてしまいます。
接続してしまえば、 VS IDE から確認出来ますが、ね。

ですから、フォルダ名 は SQL Server の Version が分かる名称 にするのが、後々、吉かも知れません。

これらの点は、古い IDE を一切使わないのであれば、考慮する必要はありません。



0 件のコメント:

コメントを投稿