PDA自体にデータベースを乗せる簡単な検証をしてみました。
極小SQL Server Compactでデータベース・アプリをお手軽作成
http://www.atmarkit.co.jp/fdotnet/joyofprogram/20080701devssce/devssce_01.html
利用方法としては、
– データベースをあらかじめ作成しておいて SD メモリに置く。
– アプリケーションからPDA上のDB(SDFファイル)を参照する。
– 無線LANなどが使えるときは、適宜DBをアップデートする。
ってな感じを想定しています。
DBのアップデートに関しては、地図や電話帳みたいな固定データは丸ごとPCからコピーしてもOK。
PDAで編集したメモ書きなんかは、適宜PCでマージしてやって(PDAでマージでもOK)、DBに書き戻すという方法がよいでしょう。
ActiveSync に関しては保留。中古でPDAを手に入れると大抵クレードルがありません(スタライスも無いことが多い)。なので、PDAとPCとのデータのやり取りは、
– SDメモリ経由
– CFカード経由
– 無線LAN
– Bluetooth
に限られます。赤外線でもいいけど、昨今のノートPCには赤外線が乗っていない機種が多いのでパス。
勿論、PDA自体に無線LAN/Bluetoothが乗っていない場合もあるわけですが、それはそれで(今時の)使い勝手を考えて現在保留。
さて、本題ですが、PDAでSQL Server Compact 3.5 を使うときは、System.Data.SqlServerCe 名前空間を使います。この中に SqlClient と同等のクラスが含まれています。
参照設定に「System.Data.SqlServerCe.dll」を追加します。
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 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 DBAccess01 { public partial class Form1 : Form { private SqlCeConnection m_cn; private string m_ConnectString = "" ; public Form1() { InitializeComponent(); //DBの位置 System.Reflection.Module[] modules = System.Reflection.Assembly.GetExecutingAssembly().GetModules(); string path = System.IO.Path.GetDirectoryName(modules[0].FullyQualifiedName); m_ConnectString = "Data Source=" + path + "\\AppDatabase1.sdf" ; } // 接続 private void button1_Click( object sender, EventArgs e) { //MessageBox.Show(m_ConnectString); m_cn = new SqlCeConnection(m_ConnectString); try { m_cn.Open(); MessageBox.Show( "接続完了" ); } catch ( SqlCeException ex ) { MessageBox.Show(ex.Message); } } // 切断 private void button2_Click( object sender, EventArgs e) { if (m_cn != null ) { m_cn.Close(); MessageBox.Show( "切断" ); m_cn = null ; } } // 検索 private void button3_Click( object sender, EventArgs e) { SqlCeConnection cn = new SqlCeConnection(m_ConnectString); SqlCeDataAdapter da = new SqlCeDataAdapter( "SELECT * FROM t_product" , cn); DataTable dt = new DataTable(); da.Fill(dt); this .dataGrid1.DataSource = dt; } } } |
接続文字列は
Data Source=SDFファイル名
のように指定します。上のソースではアプリケーション(EXEファイル)と同じ場所にあるSDFファイルを指定しています。
あと、PDA には .NET Compact Framework 3.5 と Microsoft SQL Server Compact Edition v3.5 なるものが必要です。.NET Compact Framework 3.5 のインストールに関しては、http://www.moonmile.net/blog/?p=82 を参照して貰うことにして、SQL Server Compact の方は Visual Studio 2008 をインストールしたときには、
C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\
にあります。
# 2005 とか Express Edition の場合はよくわからないのですが、先の「極小SQL Server Compactでデータベース・アプリをお手軽作成」の記事を眺めると結構大変そうなので、これはまた別の機会に。
この中にあるCABをインストールします。これはPDAによってCABが決まっています。
– sqlce.ppc.wce4.armv4.CAB
をPDAにインストール。そしてリセット(リセットしないと駄目らしい)。
SDメモリにサンプルで作成したファイルを入れます。
– DBAccess01.exe: 実行ファイル
– AppDatabase1.sdf: DBのファイル
– System.Data.SqlServerCe.dll: CE用DLL
で、実行したときの結果がこちら↓
SDメモリから直接起動
DataGridView に表示しているところ。
メモリの使用率が気になるところですが、今は測定していないので無視。
ちょっと気になったのが、
– varchar, char は無く、nvarchar, nchar で置き換える必要あり。
– ストアドプロシージャは作れない。
– レプリケーション機能がある。
– 日付型がdatetimeしかない。date型やtime型がない。
など細かな違いがあります。個人的には nvarchar に変換するのが面倒なのと、ストアドが無いってところですかね。システム関数はどこまで対応しているのか分かりませんが。