開発をする際には以下の点に気をつけること
※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なのか分からないのでとても不便です。