Home > プログラミング > VB.NET Archive

VB.NET Archive

New API Viewer

  • Posted by:
  • 2008年3月10日 23:30
  • VB.NET

.NETネタではないのですが、いまだにVB6.0で開発していたり、.NETにマイグレーションしたりするときに、役に立つかもしれないツールです。

New API Viewer 1.0.2

何かというと、Win32APIのAPIビューアとのことです。
VisualBasic6.0にも付いてきていますが、誤植が多く評判が良くないので、こちらを使ってみると良いかもしれません。

でも、スクリーンショットを見ると、Any型が出てきていますね。
マイグレーション用としての用途はイマイチかもしれません。

旧暦月日

JapaneseLunisolarCalendar クラス


JapaneseLunisolarCalendar クラスは、太陰太陽暦を表す EastAsianLunisolarCalendar クラスから派生しています。EastAsianLunisolarCalendar クラスでは、太陽暦と、太陰太陽暦、年が時代 (年号) に関連付けられ 60 年周期を持つ暦、および年の任意の月の後に閏月を置くことができる暦との間の日付の変換がサポートされます。

閏月は、年の任意の月の後に置くことができます。たとえば、GetMonth メソッドは、特定の日付に関連付けられた月を示す 1 ~ 13 の範囲の数値を返します。閏月が 8 番目の月と 9 番目の月の間にある場合、GetMonth メソッドは、8 番目の月に 8 を返し、8 番目の閏月に 9 を返し、9 番目の月に 10 を返します。

現在、JapaneseLunisolarCalendar は CultureInfo クラスがサポートしているどのカルチャでも使用されていません。したがって、このクラスは、日本の太陰太陽暦での日付を計算するためだけに使用できます。

各 CultureInfo は一連の暦をサポートしています。Calendar プロパティは、カルチャの既定の暦を返し、OptionalCalendars プロパティは、そのカルチャがサポートしているすべての暦の配列を返します。CultureInfo が使用する暦を変更するには、CultureInfo.DateTimeFormat の Calendar プロパティを新しい Calendar に設定します。

へえ、こういうのが用意されているのね...

LIB環境変数の警告

  • Posted by:
  • 2006年11月 7日 21:00

ビルド時に
Invalid search path 'C:\Program Files\Microsoft Visual Studio.NET\FrameworkSDK\Lib\' specified in 'LIB 環境変数' -- '指定されたパスが見つかりません。 '
の警告が出てしまうので、調べてみました。

【as blog】LIB 環境変数

どうやら、VisualStudio2002が悪さしているようですね。
アンインストールしているのですが、削除されずに残っていたようです。

【VisualStudio2005】ASP.NET開発サーバを固定ポートにする。

  • Posted by:
  • 2006年10月20日 12:16

ASP.NETのデバッグ実行時に、ASP.NET開発サーバが起動するのですが、これがランダムなポートなのでいろいろと面倒な場合があります。
(例えば、WEBプロジェクトを複数のソリューションに追加すると、ソリューションごとにポートが違ったり)
ただ、ランダムに設定されるのは初回だけで、以降は同じポートを使い続けています。
ということは、ソリューションファイルかな?ということで覗いてみました。

VWDPort = "ランダムに設定されたポート番号"
と書いてあるあたりが怪しいので、早速変更してみるとビンゴ!

※ソリューションファイルをテキストエディタで変更する方法なので、自己責任で行うようにしてください。
 何か不具合がありましても責任を取りかねます。
 念のため、バックアップしておく等の措置を行った方が良いと思います。

【VisualStudio.NET】sealedキーワードでインライン化

  • Posted by:
  • 2006年9月 3日 13:24

第 5 章 「マネージ コード パフォーマンスの向上」
ちょっと長いドキュメントですが、「sealed キーワードの使用を検討する」の見出しの部分になります。

簡単に説明すると、仮想メソッド(virtual)をオーバーライド(override)していてもう継承する予定が無い場合、sealedを付けると高速化するというもののようです。
「クラス設計を拡張する必要がないなら、仮想メンバは使わないようにしてください。仮想テーブル検索による呼び出しの負担が大きく、実行時のパフォーマンス最適化を妨げる場合があるためです。」
と書いてあるように、仮想メソッドはオーバーヘッドが大きいようです。
sealedで明示的に終わりを宣言すると、コンパイラの最適化でvirtualなメソッドの中身をインライン化するようです。
そうすると実質的にはvirtualの呼び出しが行われなくなるので(インライン化されているから)、高速化するという理屈なんじゃないかなと思います。

微妙な高速化ですが、繰り返し処理で使われている場合は改善が見込めるかもしれません。

【ADO.NET】SqlParameterのサイズプロパティ

  • Posted by:
  • 2006年8月20日 20:57

共通的なDataAccessクラスを作成していたところ、エラーが発生したので公開します。

エラー内容
 着信の表形式のデータ ストリーム (TDS) リモート プロシージャ コール (RPC) プロトコル ストリームが不適切です。パラメータ 8 ("@HOGE"): データ型 0xE7 に、無効なデータ長またはメタデータ長が指定されています。

該当箇所のソースコードは以下のとおり


DbParameter dataParamArray = new DbParameter();
dataParamArray.ParameterName = "@HOGE";
dataParamArray.Direction = ParameterDirection.Input;
dataParamArray.Size = 8000;
dataParamArray.Value = "TEST";

プロパティをいろいろいじって調べてみると、どうやら dataParamArray.Size に大きな数値を入れると異常終了することが判明しました。
そこでMSDNで調べてみたところ、dataParamArray.Size や dataParamArray.Type は特に設定する必要は無く、dataParamArray.Value によって自動的に判別されるとのこと。
実際、dataParamArray.Sizeを削除したところ、正常に動作しました。

スキーマコレクションからテーブル一覧を取得する方法

  • Posted by:
  • 2006年8月10日 14:34

以前、SQL文を実行してSQLServer上のテーブル一覧を取得する方法を紹介しましたが、今回はスキーマコレクションから取得する方法です。

参考
SqlConnection.GetSchema メソッド
GetSchema メソッドの使用

参考の例だとSqlConnectionを使っていますが、.NET Framework version 2.0なら DbConnectionを使うこともできます。
実際に他のデータベースで試したことはないですが、テーブル情報取得のSQL文はデータベースによって大きく異なるため、結構使えるかもしれません。

Singletonパターンを使ったファイル変更監視

  • Posted by:
  • 2006年8月 8日 17:03

アプリケーション起動中、常にファイル監視をする要件があったとします。
具体的に言うと、あるファイルを常に監視し、ファイルが変更されたときに再読み込みをする等のイベントを処理させます。
実装例としては、自前で用意した環境ファイルのデータを保持するといったようなものが考えられると思います。

ファイルの監視方法ですが、FileSystemWatcherで監視するファイルを設定し、FileSystemEventHandlerでイベントハンドリングを行えばよさそうです。
こういう仕組みが備わっているのが.NETの良さですね~

FileSystemWatcher watcher = new FileSystemWatcher(ファイルパス, ファイル名);
watcher.Changed += new FileSystemEventHandler(処理したいメソッド名);

のようにすればOKです。
常時監視ということなので、監視モジュールが常にメモリにロードされている必要があります。
常時ロードとなると、ASP.NETの場合、Application_Startに記述してしまえばいいのですが、そのロジックをWindowsアプリでも汎用的に使うことはできません。

そこで、ASP.NETでも常にメモリにロードされているということで、Singleton実装にしてみました。
Singletonのそもそもの目的は、アプリケーション内で唯一存在するオブジェクトを作成するためなのですが、唯一存在させるためにインスタンスをstaticで保持しています。
そのため、Singletonのコンストラクタで上記の監視ロジックを入れておけば、常にメモリに存在することとなり、どのプログラムを実行していてもイベントが発生します。
問題点は、Singletonなので複数のファイルを監視できないことですが、そのような場合はGetInstanceの仕組みを変えてあげることで対処できそうです。

【デザインパターン】C#でのシングルトンの実装

  • Posted by:
  • 2006年7月19日 13:30

システム内部で唯一のインスタンスがほしいときは、Singletonパターンが有効的な手段になります。
具体的な利用例としては、共通変数の管理や滅多に変更されないコードと名称の組み合わせを持っておく等が考えられると思います。

私はJavaでデザインパターンを覚えたこともあって、インスタンス取得のために GetInstance のようなメソッドを用意したいたのですが、もっと画期的な方法がありましたので紹介したいと思います。
C# でのシングルトンの実装
画期的と言っても、実装方法はほとんど変わらず、プロパティを利用しただけなのですが、コードはとてもすっきり見やすくなっています。
応用例としてマルチスレッド対応のシングルトンや静的な初期化も説明が載っています。

【ASP.NET】JavaScriptとコードビハインド

  • Posted by:
  • 2006年7月11日 22:25

ASP.NETの画面を見ていると、当然のごとくJavaScriptが出てくる。
よくよく考えてみると、JavaScriptはエンジニアに嫌われる代表的な技術だと思う。
ブラウザ依存するし、デバッグは面倒くさい。
作り方によってはセキュリティに影響を与えることもある。
しかも、ブラウザの設定でオフに出来ちゃう。
でも、応答速度を求められると、これを使わざるを得ないのが現状なんですよね。

あと、とっても気になる点として、コードとビューの分離「コードビハインド」に関わる問題があります。
ASP.NETでは、JavaScriptで処理していたコードをイベント記述することで、コードとビューを分割できることを売りの一つとしています。
要は、「画面は画面、ロジックはロジック」とハッキリさせた方が分かりやすいし、メンテナンスしやすいでしょ?ってことなんだと理解してます。
従って、いくら入力チェックとはいえ、HTML(ASPやJSPも含む)上にロジックを書くってのは、ちょっと違うんじゃないかなあと思うわけです。

しかしながら、現実的に目の前に広がる世界にはJavaScriptが溢れているわけで、急に無くすと政治的な問題になりかねないので、思案のしどころです。
とりあえずの策として、WEBコントロールのAttributeにJavaScriptを突っ込む方法でいこうかと考えていますが、普通はどうやるんでしょうね???

謎は深まるばかり。

System.Data.Common名前空間

  • Posted by:
  • 2006年7月 7日 00:24

System.Data.Common 名前空間
ADO.NET でのプロバイダに依存しないコードの作成

これすごいです。
7/4の記事でポリモーフィズムがどうたらとか書いていたんですが、もうどうでもいいです(泣)
VisualStudio.NET 2003までは、各プロバイダ用にサブクラス化していた(さらに言うと、依存DLLの関係でプロジェクトも分けていた)んですが、もうそんな必要は無いようです。

で、早速使ってみました。
たとえば、SqlParameterなんかの場合はDbParameterなんて感じになります。
基本的にDb****という命名になるようですね。
Newする際には、ファクトリクラスを使ってCreateするだけのお手軽さでした。
デバッグ実行でブレークしたついでに、オブジェクトの状態を見てみると、ちゃんとプロバイダごとのオブジェクトが生成されてます!
速度も特に遅いと感じたこともなかったので、今後はこれがスタンダードになるのかな。

【VisualStudio】出力ウインドウへメッセージを表示させる

  • Posted by:
  • 2006年7月 4日 14:59

テスト用にVisualStudioの出力ウインドウにメッセージを表示させたいとき、System.Diagnostics.Debug、System.Diagnostics.TraceのWriteメソッドを使用します。

両者の違いは、それぞれDEBUGディレクティブ、TRACEディレクティブが宣言されているかどうかです。
この宣言はVisualStudio2005の場合、プロジェクトのプロパティでチェックするだけで宣言したことになります。

[HOWTO] Visual C# .NET でのトレースとデバッグの方法

O/Rマッピング

  • Posted by:
  • 2006年7月 4日 12:24

O/Rマッピングを調査中です。
というか、激しく悩んでいます。

O/Rマッピングを簡単に説明すると、オブジェクトとリレーショナルデータベースを自動的にマッピングする仕組みです(簡単すぎ:汗)。
Hibernateなんかが有名なんですが、SQL文、データベース名とオブジェクト名のマッピング、テーブルのカラムとクラスのフィールドのマッピング等をXMLに定義しておくことで、自動的に変換してくれる仕組みです。

これを導入することで、オブジェクト指向とリレーショナルデータベースの思想の違い(インピーダンスミスマッチ)を解決できるし、ビジネスロジックにSQLが紛れ込むこともなくなります。
また、SQLがXMLに書かれるため、メンテナンスがし易いといったメリットもあるのです。

当然のことながら、C#でも実装できますし、オープンソースでもいくつかあります。
ところが、.NETではDataSetというのがあって、これを使うことでデータグリッド等の表示が簡単に行えるので、わざわざエンティティクラスを定義する必要があるのか微妙なところです。
というか、DataSetをエンティティクラスの代わりに使うこともできちゃいますし。(現実世界の構造とは狂うかもしれないが)
あと、DataTableを変更したときに、変更内容に応じて自動的にInsert、Update、Deleteを行ってくれる機能まであったりする。
しかも、Abstractクラスでメソッド宣言するときに、パラメータなんかとインタフェースで定義しておいて、実装はサブクラスで行うようにすれば、ADO.NETだけでなく、ODP.NETやpgsqlでも、ポリモーフィズムが実現できる。

また、SQLをXMLに書くというのも、私は大歓迎ですが、O/Rマッピングを知らないエンジニアがすんなり受け入れてくれるとも思えないんですよねえ。
とりあえず、
・SQLをXMLに書かないが、データベース層に該当するクラス内に閉じ込める
・DataSetを返す
・機能(SELECT、INSERT、UPDATE、DELETE)と実装(SQLの実行、トランザクション処理、コネクション管理)を分ける
といったあたりを念頭にコーディングしてみることとする。

C#とVB.NETとの違い(その2)

  • Posted by:
  • 2006年6月29日 22:55

構成ファイル(Web.config、App.config)の値を読み込む際に
[VB.NET - .NET2003]
myConfig = (NameValueCollection)ConfigurationSettings.AppSettings(strAddress);
myConfig = (NameValueCollection)ConfigurationSettings.GetConfig(strAddress);

こんな風に書いていた訳だが、そのままC#にコンバートしたらWarningが出た(泣)
警告'System.Configuration.ConfigurationSettings.AppSettings' は古い形式です: 'This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings'
Warningなので放置プレイでも良かったんだけど、そこはエンジニアとしてのプライドが...

[C# - VS2005]
myConfig = ConfigurationManager.AppSettings[strAddress];
myConfig = ConfigurationManager.GetSection[strAddress];

単純にConfigurationManagerに置き換えるだけかと思いきや、MSDNを見るとSystem.Configurationを参照に追加しないといけないみたい。
あと、GetConfigはGetSectionに。
usingはそのままでいいのに、変なの~

C#とVB.NETとの違い(その1)

  • Posted by:
  • 2006年6月29日 22:48

今月から仕事の関係でC#を勉強中。
と言っても、いきなりフレームワークの作成なんかしてたりする。

以前VB.NETをやっていたので、文法の置き換えだけですぐなじめると思っていたのだが甘かった...
C#に比べると、VB.NETは規則が緩いのである意味何でもできたりする。
逆にC#はいろいろな部分が厳密なため、品質の高いコードが書けそうな気がする。

また、今使っているのがVisualStudio2005なので、新たな機能も当然の事ながら追加されている。
この辺りも備忘録として残していくつもり。

Index of all entries

Home > プログラミング > VB.NET Archive

Search
Feeds
Tag Cloud
Recommend

SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系
ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ITアーキテクト vol.1
ITアーキテクト vol.1

オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン

増補改訂版 Java言語で学ぶデザインパターン入門
増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

J2EEデザインパターン
J2EEデザインパターン

アンチパターン―ソフトウェア危篤患者の救出
アンチパターン―ソフトウェア危篤患者の救出

世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本
世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本

Return to page top