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」を追加します。
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 に変換するのが面倒なのと、ストアドが無いってところですかね。システム関数はどこまで対応しているのか分かりませんが。


