端数の切り上げ処理に注意
端数処理というと、切捨、切上、四捨五入、JIS丸めの4種類と思われがちですが、
端数を切り上げて整数にするという場合のルールは実は2種類あります。
①整数値を少しでも超えていたら切り上げるケース
例)0.01→1
②端数処理後有効桁の次の桁、つまり少数第一位に対して切り上げを行うケース
例)0.01→0、0.10→1
一般的には①が正しいとされEXCELのROUNDUP関数もこの仕様ですが、②を採用したシステムも世の中には存在しており、料金計算などでシステム間の値が合わないといったトラブルの原因となる為、あらかじめ確認が必要です。
エクスプローラの縮小版表示を簡単に行う方法(VB.NET,C#)
WinFormでエクスプローラの縮小版表示を行う一番簡単な方法は、WebBrowserコントロールを利用します。
FormにWebBrowserコントロールを貼りつけ、以下のようにイベントを記述します。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Me.WebBrowser1.Navigate("C:\WINDOWS")
Me.WebBrowser1.ActiveXInstance.document.CurrentViewMode = 5
End Sub
実行ファイルにリソースとしてソースファイルを圧縮格納する方法
ソフトウェアの開発・保守にて、プログラムソースの管理をどんなにしっかり行っていても、実行モジュールに対応したソースがどれだかわからない。あるいはソースコードが行方不明になるという事故が発生することがあります。
今回は VisualStudio2005、2008 を使って実行ファイル(.exe、.dll)にソースファイルを含めてしまうことで、実行ファイルとソースの等価性を確実に保証し、実行ファイルから完全なソースコードを復元できるようにする方法を紹介したいと思います。
あらかじめコマンドラインから呼び出せるフリーのアーカイバである7-zipをインストールしておく必要があります。
VisualStudioより、ダミーの「src.zip」をプロジェクトに追加し、ビルドアクションを「埋め込まれたリソース」にします。
VB.NETの場合だと、プロジェクトのプロパティ⇒コンパイル⇒ビルドイベントより
(※ VB.NET Express Editionではビルドイベントの設定はできません。C# Express Editionでは設定可能。)
[ビルド前に実行するコマンドライン]
DEL "$(SolutionDir)src.zip""C:\Program Files\7-Zip\7z.exe" a -tzip "$(SolutionDir)src.zip" "$(SolutionDir)" -x!src.zip -x!obj -x!bin -r
[ビルド後に実行するコマンドライン]
type nul > "$(SolutionDir)src.zip"
をそれぞれセットします。
また、プロジェクトを作成・保存する際には、「ソリューションのディレクトリを作成」チェックボックスを外しておきます。
(※チェックを付けたくない場合、ビルドイベントの$(SolutionDir)を$(ProjectDir)としてやる必要があります。)
以上の手順で、ビルドする際に自動的にソースフォルダが圧縮され、リソースとして実行モジュール(.NETアセンブリ)に格納されることになります。
実行モジュールから簡単にソースファイルを取り出すには.NET Reflector等を利用すると良いでしょう。
SQLSERVER 行ロックの真実
SQL SERVER2005にて行ロックの実験をしてみたいと思います。
下記のSQLをManagementStudioより実行します。
まずはテーブルを作成してデータをセットします。
CREATE TABLE IKENIE(A INT)
INSERT INTO IKENIE SELECT 1
INSERT INTO IKENIE SELECT 2
INSERT INTO IKENIE SELECT 3
INSERT INTO IKENIE SELECT 4
INSERT INTO IKENIE SELECT 5
INSERT INTO IKENIE SELECT 6
INSERT INTO IKENIE SELECT 7
INSERT INTO IKENIE SELECT 8
INSERT INTO IKENIE SELECT 9
INSERT INTO IKENIE SELECT 10
次に1件だけを対象に行レベルの更新ロックをかけてみます。
BEGIN TRAN
SELECT TOP 1 *
FROM IKENIE WITH(UPDLOCK,ROWLOCK)
ORDER BY A
利用状況モニタより、ロックの状況を確認してみましょう。
このようにロックエスカレーションせずに、テーブル内のすべての行が確実に行ロックされているのが確認できますね。!!!んっ!?