拝啓、さかもとと申します

開発をする際には以下の点に気をつけること

※SQL Server Compact3.5を利用する上で必要なツールはちゃんとインストールしているという前提で。ツールとかはここを見る

 

1:Visual Studioは2008じゃないとVSのサーバーエクスプローラーからはCompact3.5のファイル操作はできません。

LINQが使える(らしい)のでこれは当たり前といえば当たり前かも。

 

2:サーバーでデータベースを作成するときはここを見る。

http://msdn2.microsoft.com/ja-jp/library/ms173009(SQL.100).aspx

ManagementStudioでやれって書いてますね。

 

3:データベースを管理したいときはここを見る。

http://msdn2.microsoft.com/ja-jp/library/ms171916(SQL.100).aspx

ManagementStudioでやれって書いてますね。

 

で見てみると、とにかく「Management Studio使いなさいね?」ってありますが、私が試した限りではMSSQL2005用の(Expressエディション含む)Compact3.5のデータベースファイルは操作できず・・・。アタッチできないんですよね。

 

VS2008でファイルを作った後に、無理やりManagementStudio2005で接続すると「バージョン違うからダメよん」って怒られます。

 

BooksOnlineでは「どのエディションで」とは書かれていないわけですよ。だからあれこれ実験した結果が「2005じゃ駄目っぽい」ということなんですよ。

 

ただ、「どのエディションで」と敢えて書いていないところを見ると、今後SQL Server2008の開発進捗状況によっては「さしあたり2005用で動くようアドインを用意しました」となるかもしれません。なってほしいです。

だって、2008用のManagementStudioって現時点で無い(無いですよね・・・?)わけですから、つまりはVS2008を使うほか手段はないんじゃないかと。そんなのずるい。

 

http://www.eggheadcafe.com/software/aspnet/31249975/sqlce-35-and-management.aspx

ここを見ると、3.0 3.1 3.5を使えるCompact用のツールがある様子。

http://www.primeworks-mobile.com/Products/DataPortConsole.html

↑これです。

 

もし万が一「それは違う!○○ってやればCompact3.5を2005用のManagementStudioで使えるんだ!」というのをご存知の方はやり方を教えて頂きたく。

 


-----------------------------------------------------------------------------------------

ので、System.data.SqlServerCE

デフォルトのパスであれば(Desktop用ですね)

C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop\System.Data.SqlServerCe.dll

を参照追加してあげる。

もちろんこれはバージョン3.5

 

で。

Compact3.5のデータベースファイルを作成するようにコードを書いてあげる

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace Main
{
    public partial class さかもと画伯 : Form
    {
        public さかもと画伯()
        {
            InitializeComponent();
        }

        private void 僕をクリック_Click(object sender, EventArgs e)
        {
            SqlCeEngine CeEngine = new SqlCeEngine();
            System.IO.File.Delete("GAHAKU.sdf");
            string connString = "Data Source = 'GAHAKU.sdf'; LCID=1033; Password = TENSAIGAKA; Encrypt = TRUE;";
            SqlCeEngine engine = new SqlCeEngine(connString);
            engine.CreateDatabase();
        }
    }
}

 

すると警告が発生する。

 

「同じ依存アセンブリの異なるバージョンで競合が見つかりました」

 

意味分かんないのでダブルクリックすると

 

「app.configファイルにバインドリダイレクトレコードを追加してこの競合を修正しますか?」

 

とでる。

 

素直に言うことを聞いて追加してもらうと、

 

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845DCD8080CC91" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-9.0.242.0" newVersion="9.0.242.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

 

こんなのが追加されました。

もちろんVS2008でやってみる競合は起こらないです。

 

で。

 

一通り試してみたところ、ManagementStudio使ってGUIでコネコネはできないけど、コードでチマチマお触りしていくとなんとか使えるみたいです。

画伯はどーしてもマウスを使いたいお年頃なのでGUIがないとむんむんしちゃいます。都合上VS2008をすぐには業務PCで使えないので、Compact3.5をこねこねするのはもう少し先になりそうです。

 

ちなみに、出来上がった.sdfファイルはエクスプローラーでパッと見ると、3.1なのか3.5なのか分からないのでとても不便です。