SQL Server や MySQL は、ローカルコンピュータにデータベースをインストールしないといけないので、業務先のコンピュータにインストールするにはちょっと、という感じがします(まぁ、そういう場合は別途サーバー機を作るわけですが)。
逆に、データベース専用にサーバーを作るほどでもない、あるいは、個々のアプリケーションのデータを database として保存しておきたい場合は、「ファイルベース」のデータベースを使うと良いです。
筆頭に上がるのが、SQLite で、データベースのファイルをコピーするだけで使えます。この他にも、
- xml 形式のファイルをデータベースとして扱う。
- access 形式ファイルを扱う。
- Berkeley DB を使う。
という方法もあります。
で、実は余り知られていない(と思う)のですが、SQL Server 互換のファイルベースのデータベースがあります。
ダウンロード詳細 Windows デスクトップ向け Microsoft SQL Server Compact 3.5 および Microsoft Synchronization Services for ADO.Net v1.0
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297
ダウンロード詳細 Windows デスクトップ用 Microsoft SQL Server Compact 3.5 Service Pack 2
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=e497988a-c93a-404c-b161-3a0b323dce24
SQL Server Compact 3.5 オンライン ブック
http://msdn.microsoft.com/ja-jp/library/bb734673(v=sql.100).aspx
と前置きはこれくらいにして、SQLite を使うのもいいけど、compact edition もね、という感じで。compact edition に関しては、windows ce の頃に調べていたのですが、windows phone 7 の場合はどうなんでしょうねえ。次期モバイルには入るらしいのですが。
■ローカルデータベースを追加
visual studio にローカルデータベース(compact edition)を追加します。拡張子は「sdf」ですね。ちなみに、「サービスベースのデータベース」というのは、本家の sql server が使うデータベースファイルです。こっちの拡張子は「mdf」です。
Visual Studio 2010 で作成されるローカルデータベースは、v3.5 のプロバイダでアクセスしています。
「System.Data.SqlServerCe.3.5」のところ。
1 2 3 4 5 6 | <? xml version = "1.0" encoding = "utf-8" ?> < configuration > < connectionStrings > < add name = "Model1Container" connectionString = "metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlServerCe.3.5;provider connection string="Data Source=|DataDirectory|\Database1.sdf"" providerName = "System.Data.EntityClient" /> </ connectionStrings > </ configuration > |
■Entity Model を作成
ちょっと工夫が要りますが、Enity Model を作成します。初期値は「Model1Container」になってます。
[img 20120110_05.jpg]
作成されたスクリプトはこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | -- -------------------------------------------------- -- Creating all tables -- -------------------------------------------------- -- Creating table 'Company' CREATE TABLE [Company] ( [ID] int IDENTITY(1,1) NOT NULL , [ Name ] nvarchar(100) NOT NULL ); GO -- Creating table 'Person' CREATE TABLE [Person] ( [ID] int IDENTITY(1,1) NOT NULL , [ Name ] nvarchar(100) NOT NULL , [Age] int NULL , [UpdateDate] datetime NOT NULL , [Company_ID] int NULL ); GO -- -------------------------------------------------- -- Creating all PRIMARY KEY constraints -- -------------------------------------------------- -- Creating primary key on [ID] in table 'Company' ALTER TABLE [Company] ADD CONSTRAINT [PK_Company] PRIMARY KEY ([ID] ); GO -- Creating primary key on [ID] in table 'Person' ALTER TABLE [Person] ADD CONSTRAINT [PK_Person] PRIMARY KEY ([ID] ); GO -- -------------------------------------------------- -- Creating all FOREIGN KEY constraints -- -------------------------------------------------- -- Creating foreign key on [Company_ID] in table 'Person' ALTER TABLE [Person] ADD CONSTRAINT [FK_CompanyPerson] FOREIGN KEY ([Company_ID]) REFERENCES [Company] ([ID]) ON DELETE NO ACTION ON UPDATE NO ACTION ; -- Creating non-clustered index for FOREIGN KEY 'FK_CompanyPerson' CREATE INDEX [IX_FK_CompanyPerson] ON [Person] ([Company_ID]); GO |
compact edtion の場合は、文字列は nvarchar に統一されています。なので、sql server からスクリプトを流用するときは、ちょっと変換が必要ですね。
■接続テスト
簡単な接続テスト
1 2 3 4 5 6 7 8 9 10 11 | /// /// 接続テスト /// /// <param name="sender" /> /// <param name="e" /> private void button1_Click( object sender, EventArgs e) { Model1Container ent = new Model1Container(); var persons = from t in ent.Person select t; dataGridView1.DataSource = persons; } |
ナビゲーションプロパティを使って person と company を結合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /// /// リンク付きで検索 /// /// <param name="sender" /> /// <param name="e" /> private void button2_Click( object sender, EventArgs e) { Model1Container ent = new Model1Container(); var items = from t in ent.Person orderby t.Age select new { t.Name, t.Age, CompanyName = t.Company.Name }; dataGridView1.DataSource = items; } |
データベースファイル自体は、「Database1.sdf」というひとつのファイルになるので、これをコピーすればどこでも使えます。ああ、あと .net framework 4.0 も必要ですが。
.NET Framework 4 ダウンロード: SDK | MSDN
http://msdn.microsoft.com/ja-jp/netframework/ff687189
ダウンロード詳細 Windows デスクトップ用 Microsoft SQL Server Compact 3.5 Service Pack 2
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=e497988a-c93a-404c-b161-3a0b323dce24
—
追記
SQL Server Compact の場合は、実行ファイルとデータベースファイル(*.sdf)をコピーすれば動くのかと思ったら、別途 SQL Server Compact 3.5 等のインストールが必要になる模様。動かしたときに、プロバイダーが作成できない、という例外が発生する。なので、クリーンなクライアントマシンで単純コピーでは動かないから、数百台のインストールのようなものが発生する場合は、SQLite のほうがいいのかなぁ。できれば、SQL Server Compact のインストールはしたくないので(.NET Framework 4.0 は仕方がないにしても)、適当なアセンブリ(*.dll)をコピーすれば、クリーンな windows 7 マシンでも動作する、っていうのがいいなぁ。
ハウディ と協力利用あなたがしているあなたは私がどのWebホスト知らせる気にしますか?その後、ほとんどの| 速く速く と私は、このブログは多くのことをロードすると言わなければならない| 異なる全く異なる私は3であなたのブログをロードしました。あなたがすることができます価格 でプロバイダ|良い 示唆をお勧めしますか? 栄誉、私はそれを感謝します!
店内全品半額以下SALE http://kiyoto.tokyo/?class81=24948