掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

Top Index

2014年09月28日
AttributeクラスのInheritedプロパティって何ぞ?

Attribute.Inherited プロパティ

参考:カスタム属性の記述
http://msdn.microsoft.com/ja-jp/library/84c42s56(v=vs.100).aspx
Inherited プロパティは、属性が適用されるクラスから継承されるクラスが、その属性を継承できるかどうかを指定します。
このプロパティには、true (既定値) または false のいずれかのフラグが指定できます。

「属性が適用されるクラスから〜」といってますので、
クラス向け属性の情報だから、プロパティ向け属性とかで指定しても意味ないよ。
クラス向けの属性の場合、継承したクラスにもその属性を引き継ぐかどうかを指定してね
(初期値は継承先でも有効だよ)。


ふむふむ。特に変なところはないですね。
これだけなら特に迷うことはない…が、ことはそうはいかない。

MemberInfo.GetCustomAttributes メソッド
inherit パラメーター

参考:MemberInfo.GetCustomAttributes メソッド (Boolean)
http://msdn.microsoft.com/ja-jp/library/kff8s254(v=vs.110).aspx
パラメーター
inherit型 : System.Boolean
このメンバーの継承チェーンを検索して属性を見つける場合は true。それ以外の場合は false。
プロパティおよびイベントの場合、このパラメーターは無視されます。「解説」を参照してください。
(中略)
解説
このメソッドでは、プロパティおよびイベントの inherit パラメーターは無視されます。
プロパティおよびイベントの継承チェーンを検索して属性を見つけるには、Attribute.GetCustomAttributes メソッドの適切なオーバーロードを使用します。

読み込む関数側にも「継承ってどうする?」という引数があることです。
?どういうこと?

というわけでその辺の相関関係を洗う。

続きを読む ...
 
[ 投稿者:mk3008 at 16:39 | VB.NET | コメント(0) | トラックバック(0) ]

2014年09月07日
Dynamic SQL Parser をCodeplexで公開
2way sql parser「Dynamic SQL」をcodeplexで公開しました。
https://dsqlparser.codeplex.com/

実戦投入したことないのがアレですが、
単体テスト(自動化済み)は通ってるので大丈夫でしょう。

SQLのデバッグにお悩みの方はご参考ください。
[ 投稿者:mk3008 at 11:12 | VB.NET | コメント(0) | トラックバック(0) ]

2014年08月31日
SQLを書くときはString派?StringBuilder派?それとも…
VB2010+.NET3.5以上

VBからDBを操作しようとした場合、何かしらの方法でSQL文(文字列)を記述する必要があります。

その方法は3種類ほど考えられまして、
1. String型を使う
2. StringBuilder型を使う
3. リソースファイル化する
が一般的だと思うのですが、
なんと第4の方法「XMLリテラル」があったのです。びっくり。

元ネタはこちら
Mutliline String Literals in VB.NET
http://www.codeproject.com/Articles/292152/Mutliline-String-Literals-in-VB-NET
ではXMLリテラルを使ったコードを見てみましょう。

続きを読む ...
 
[ 投稿者:mk3008 at 02:53 | VB.NET | コメント(4) | トラックバック(0) ]

2014年08月16日
WebAPIを使ってBacklogの課題、コメントを取得する
VB.NET+VB2010+.NET4

課題管理ツールBacklog(http://www.backlog.jp)の情報を
WebAPIを使ってVB.NETから取得してみたいと思います。

BacklogのWebAPIの仕様はこちらで公開されています。
http://developer.nulab-inc.com/ja/docs/backlog/api/2/get-space

事前準備


Backlogのヘルプ「APIの設定(事前準備)」を参照し、APIKey文字列を取得しておいてください。
これがないと始まりません。

以下、サンプルコードの抜粋と説明。

続きを読む ...
 
[ 投稿者:mk3008 at 22:16 | VB.NET | コメント(0) | トラックバック(0) ]

2014年08月15日
動的SQL文(2way-SQL)パーサーを作る
VB.NET+VB2010+.NET4

2way-SQLってなに?って方はぐぐってください(説明放棄)

で、本題。
2way-SQLはAND、OR条件が複雑なデータ検索処理を簡単に実装することができる素敵なSQLなのですが、
.NETのパーサー(2Way-SQLを解析するプログラム)ってのが単独で存在するのかしないのかよくわかりません。
Seasar2や、DBFluteの機能の一部に存在するのは知っていますが、
パーサーだけ提供されているか不明。
というわけでIDbCommandを吐くところまでしか行わない(O/Rマッピングなどはしない)、
手軽にどのプロジェクトにでもぶち込めるパーサーを作ります。

以下構文とか、ソースコードとか。

続きを読む ...
 
[ 投稿者:mk3008 at 21:49 | VB.NET | コメント(0) | トラックバック(1) ]

2014年08月14日
StringBuilderに区切り文字を追加する拡張メソッド
大したコードではないです。個人的によく使うのではっときます。

StringBuilderが空かどうかを判断して、空でない場合は区切り文字を追加します。
ちなみにLengthプロパティの値評価は高速です(StringBuilderのLengthプロパティは遅いか?速いか?

使用例

続きを読む ...
 
[ 投稿者:mk3008 at 21:58 | VB.NET | コメント(0) | トラックバック(1) ]

2014年08月10日
Magick.NETでPDFのサムネイル画像を作る
VB.NET+VB2010+.NET4


PDFのサムネイル画像を作ろうといろいろネットを探してみて、
Magick.NET(codeplex)というライブラリがあることを見つけました。
サンプルコードもあるし、まぁ楽勝だろうと思っていたら「環境構築」で嵌ってしまいましたので、
メモ書きしておきます。

続きを読む ...
 
[ 投稿者:mk3008 at 15:59 | VB.NET | コメント(0) | トラックバック(0) ]

2014年08月03日
処理の開始、終了、異常のログを取る(NLog)
VB.NET+VB2010+.NET4

NLogというライブラリを使用してロギングを実装します。
といっても、NLogがかなりいい感じでやってくれますので、

'1. NLogに処理開始ログを出力
'2. メインの処理
'3. NLogに処理完了ログを出力

ぐらいで終わる話です。
さすがにこのまま実装するの味気ないので、
拡張メソッドで処理の前後に自動的にロギング機能を差し込みます。

わざわざ拡張メソッドにした理由はこんな感じ。
・既存のコードの変更点は少な目(デリゲートにするだけ)
・新規にコーディングするにしても、特に気を付ける点なし
・ログ設定をNLogとその設定ファイルに任せるため、ソースコードの改変は不要。
 使い回しがしやすい。

余談ですが、log4netではなくNLogを使用している理由に深い意味はありません。
「NLogの方がNuGetで取れるから」ぐらいなもんです。
導入が楽なのはいい。

続きを読む ...
 
[ 投稿者:mk3008 at 16:21 | VB.NET | コメント(0) | トラックバック(0) ]

2014年07月27日
例外処理入門(その2)
例外処理入門(その1)の続き。

例外の再発生(その1:ThrowとThrow exの違い)


「例外発生時の事後処理を書き、エラー処理は呼び出し元に任せる」ということはよくあります。
エラーのメッセージ処理がそうですね。
例を挙げると、こんな感じ。

※例外処理入門その1で「Exceptionクラスを直接発生させたり、捕まえたりするな」と言っておりましたが、
 毎回あれを考慮したコードを載せていては情報量が不必要に多くなるので敢えてこのように書いております。
 ご了承ください。

ここで23行目に注目!
例外を再発生させるコードは、
Throw
です。
たまに
Throw ex
と記述する人がいます。
たぶん、例外の任意発生(Throw New Exception)の構文からこう書いてしまったのでしょうが、
Throw とだけ書くようにしてください。

強調するのにはわけがありまして、「Throw だけ」と「Throw ex」ではエラーが発生した位置情報(StackTrace)が異なってくるからなのです。
以下にStackTraceの実例を挙げます。

続きを読む ...
 
[ 投稿者:mk3008 at 10:57 | VB.NET | コメント(3) | トラックバック(0) ]

2014年07月26日
例外処理入門(その1)
VB.NETではTry〜Catch文を使用して簡単に例外処理が書けますが、
使いこなすにはとても奥が深いものとなっています。
そこで、例外処理の勘所をメモしておきます。

Throw文で例外を起こそう


例外処理を学ぶためには、まず意図的に例外を起こす方法を覚えましょう。
意図的に起こすことで、例外とどのように付き合えばよいかが見えてきます。



Throw New Exception("エラーメッセージ")

と記述すればそこでプログラムがエラーで停止します。

ここでポイント

・例外処理をせずに例外が発生するとプログラムは問答無用で止まります。
・VisualStudio上でデバッグ中に例外が起きた場合は、場所(クラス、行)、理由(例外名)がわかりますが、
 EXEにしたあとでは「<アプリケーション名>は動作を停止しました」と出るだけでノーヒントです。


EXEにしてもどんなエラーが出たのかがわかるように修正しましょう。

Try〜Catch文で例外を捕まえよう




続きを読む ...
 
[ 投稿者:mk3008 at 09:00 | VB.NET | コメント(0) | トラックバック(1) ]