Mono.Data.Sqlite でDataRowにByteを格納する

以前にMonoTouch で使えるSQLiteラッパーのまとめ - にがつうさぎにMonoTouchでのSQLiteのラッパークラスを比較検討していました.
そのときにはGoogle Code Archive - Long-term storage for Google Code Project Hosting.がよいと書いたのですが,今の環境でシミュレータで動かすと,mallocで割り当てられていないメモリ領域をfreeしたとワーニングが出る,XCodegdbmallocのエラー関数にブレイクポイントを設定してbtを見ても関数名が出てこない(MonoのVMで動いている?)ために原因が追えない, SQLiteから帰ってくる値がおかしいなど,問題山積でした.これを使ったことが原因かどうかは分からないのですが,デバイス向けにコンパイルすると,コンパイラがmscorelib.dllが見つからないというエラーまで発生します.(こちらは同様のエラーが外部ライブラリを使用した際に発生したとレポートがあったので,そのうち修正されるバグのようですが)
Google Code Archive - Long-term storage for Google Code Project Hosting.SQLiteのDllを直接参照しているので,そのあたりが原因のような気がします.ちょっとどうしようかと思ったのですが,このラッパーの使用をあきらめて,Mono.Data.SQLiteを使うことにしました.

DataTableを直接アクセスするのは効率が悪いので,Google Code Archive - Long-term storage for Google Code Project Hosting.と同じように型情報を使う簡単なO/Rマッピングっぽいライブラリを構築しています.そのときにByte値の格納にはまりました.
DataTableは,データベースから値を読み込むときに,データベースからテーブルのスキーマに従いColumnのDataTypeを設定します.SQLiteの整数型はINTEGERの1つだけで,1バイトから8バイトまでの値を扱うことができます.このためINTEGERに列のColumnTypeはデフォルトでInt64になります.
Int64の値をByteに直接キャストしようとすると,InvalidCastExceptionが発生します.

 Int64 int64 = 100;
 Byte b = (Byte)int64; ← 例外発生

このためにSystem.Convertクラスを使います.

 Int64 int64 = 100;
 Byte b = Convert.ToByte(int64); 

テストを書いているところなので,そのうちに出来上がります.完成したらhttp://github.com/reinforce-lab/net.ReinforceLab.MonoTouch.Controlsのレポジトリに上げる予定です.