.net」タグアーカイブ

RDSync その1

先日長らく愛用していたEye-Fiカードの書込ロックの爪が折れてしまいました。



Eye-FiカードはSDカードなんですが、以下の機能を持ち合わせます。(Wikipediaから引用)

このカードを使用することで、メモリカードをデジタルカメラから取り出したり、デジタルカメラをパソコンに接続することなく、記録した写真データや動画データを無線LANによるワイヤレス通信でパソコンに転送したり、オンラインアルバムや写真共有サイトなどの各種オンライン写真サービスにアップロードすることが可能となる。また、iPadやiPhone、Androidデバイスに直接転送することもできる。

また2016年に製造停止、サービスはRICOHの研究開発子会社が引継ぎましたが2018年にサービス提供終了しています。
これを使うことでいちいちSDカードの中の写真を手動でコンピュータのディスクにコピーする手間を省くことができてとても重宝していたわけです。
ここ最近は無線LANでの転送が機能しなかったんですが、とりあえずコンピュータに接続したら自動でコピーしてくれていたのでそれでもまだ使い勝手はよかったと思います。
東芝からEye-Fiと同様な機能を持ったFlashAirと言うSDカードが発売されているのですが、これが結構いい値段で、まぁ手作業でコピーの手間はあるけど特別な機能のないカードを購入しました。
SDXC64GBお値段は990円と激安。ここ数年SDカードを買うことがなかったので、この金額には少々驚きました。

以前に使用していたEye-Fiカードは自動でファイルを転送(コピー)してくれるだけでなく、日付毎にフォルダも作って振り分けてくれてたんですね。この機能自体も個人的には気に入っていて、これ手動でやるの結構面倒なので、何とかならないかなぁと思ったわけです。
そんなわけで久々に.NETでプログラム書きたいなぁと思ったのもあって作り始めることにしましたよ。
続きを読む

System.Data.DataModel.BaseModel




さて、今週の課題が一段落しました。
まぁ使われるかどうかはわからないけど、バグは出るのは承知。
System.Data.DataModelという名前空間に
BaseModelと言うクラスを作りました。
インターフェイスとか継承とかしてたら、
思いのほか重くなって、当初の想定より
パフォーマンスは出ないみたいです。
でも、プログラムはきれいになって、
メンテもしやすそうだからよしとしましょう。
プロパティに値を代入する部分については(この148行目あたり)
プロパティ名と同じ名前のテーブル列を直接指定することも考えました。
しかし大文字、小文字、実際存在しない列名もあるかもしれないと言う
エラーを回避するために、foreachでプロパティ名とテーブルの列名をぶつけて
同名の物があれば代入する形を取りました。(ってToLower()してるじゃん!)

これを派生したモデルクラスを生成して、
プロパティとCRUDのSQL、接続文字列を設定すれば、
モデルクラスオブジェクトのリスト、モデルクラスオブジェクトの取得、
オブジェクトのデータベースへの格納、編集、削除が可能となります。
以下、モデルクラスの実装方法。超簡単でしょ?
(TestID, TestNameというプロパティを持つTestDataクラス)

まぁ、一番の難点はSQLのデバッグってことでしょうかね。
んで、実際に呼ぶプログラムは以下のような感じです。

最終的にはGUIでプロパティを設定して、ポチッとボタンを押したら、
テーブル追加、クラスファイル生成、CRUDのSQL生成までできるといいなぁと妄想中。
とりあえずパーツはできたので、実際にASP.NET MVCに適用して見ることにします。
えっと、夏休みは今月いっぱいだから。。。名古屋はやっぱり行けないか

ソースはこちらからダウンロードできます。

自作モジュールその1

さて使えるかどうかわからないけど、自分でプログラムを作成してみました。
ASP.NET MVCのモデルでADO.NET Entity Data Modelを使うと簡単にモデルを構成できるのですが、
これOracleでは使えないっぽいんですね。
(私の調査不足かもしれないのであしからず。ちなみにMySQLはできそうです。)
実際にViewで表示する場合、DataTableは使えないらしく、
IEnumerable型じゃないとだめとの事。
「普通にDataTableをforeachして変換すればいいんじゃない」
と思ってたのですが、どうせやるなら汎用的に使えるものをと取り掛かってみました。
モデルの親クラス(DataModeler)を作成。

ここでデータベースとのやり取りをしてやればいいなと考えたわけです。
基本的な考えはTableAdapter。
まずは一覧を取得したいということで、GetAllというメソッドだけ作ってみました。
プロパティ名と列名をぶつけるところがもっときれいにできればよかったのですが、
現状、私の知識だとここまでが精一杯というところです。
んでこのDataModelerを派生させたモデルクラスを用意します。
(よく見るNWINDを使っています、はい)

んで実際にこれを使ってプログラムを実行してみます。

呼び出しのためのコードは現状3倍くらいですが、もっと簡素化できると思います。
あと、クラス作るの大変ですが、実行速度はADO.NET Entity Data Modelを使ったときに比べてかなり早くなっています。



でもよく考えるとDataAdapter使っているから普通にグリッドビューと
SQLデータソースを使ったほうが間違いなくパフォーマンスはいいはず。
まぁあとこれを今後使うかどうかは生産性次第というところ。(MVCでやるかということも含め)
とりあえず今日の実績ということで。