2009年11月7日土曜日

C#のswitch文のフォールスルー

できないもんだと思ってたけど、会社のC#教材を読み漁ってたらgoto文で代用できるみたい。
こんな感じ。
int a = 2;
switch (a)
{
case 1:
a++;
break;
case 2:
a++;
goto case 3;
case 3:
a++;
goto case 1;
default:
a = 0;
break;
}


でも、こんなのやるべきじゃないね。

C#の言語仕様のありか

http://msdn.microsoft.com/ja-jp/library/ms228593.aspx
の通り、VisualStudio2008を入れたら一緒に入るみたい、

C:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\1041\CSharp Language Specification.doc

を見てみると、おおぅ、C#なんか半歩いく音楽教本みたいだ。日本語でよかった。ページ数は、、、575ページもあるんだ。
とりあえず、ちょっとづつ読むとして、、、下のようなクラス定義があったとして、フィールドの初期化とインスタンスコンストラクタのどっちが先に動くか分かればいいんだけど…

using System.Collections.Specialized;
class cls
{
public cls()
{
this.data.Add(1, "Start");
}
private ListDictionary data = new ListDictionary();
}



2009/11/14追記:
仕様書を見ていてら。
10.11.2 インスタンス変数初期化子
インスタンス コンストラクタにコンストラクタ初期化子が指定されていない場合、または base(...) 形式のコンストラクタ初期化子が指定されている場合は、そのコンストラクタにより、そのクラスで宣言されたインスタンス フィールドの variable-initializer で指定された初期化が暗黙的に実行されます。これは、コンストラクタへのエントリ直後、および直接基本クラスのコンストラクタの暗黙的な呼び出しの前に実行される一連の代入に対応します。変数初期化子は、クラス宣言に出てくる順番どおりに実行されます。

だそうです。
だからいいみたい。

ADO.NETで自動コミットのトランザクションの分離レベルを既定のserializableから変える方法ってどうだったっけ?

なんかあったような気がしますが、忘れてしまいました。

SQLの中で、 select * from table with(nolock)
とwith句を付けたり、

TransactionOptions tso = new TransactionOptions();
tso.IsolationLevel = IsolationLevel.ReadUncommitted;
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required,tso))
{
using (DataSet1TableAdapters.ProjectTableAdapter pta = new DataSet1TableAdapters.ProjectTableAdapter())
{
pta.GetData();
}
}

のように、トランザクションを張り、分離レベルを明示すれば書けるのはわかったんだけど。。。

2009年11月3日火曜日

PowerShellその2

Powershellモジュール上で、
PS C:\Windows\system32> ise
とすれば、開発環境(powershell_ise.exe)のウィンドウが立ち上がるので、ここからヘルプをみて、「Windows PowerShellのヘルプ」のファーストステップガイドを読み終わったところ。

でも、やっぱりマイクロソフト。文章を読んでもあまり分らない。

例えば、

技術的に言えば、.NET Framework オブジェクトは、データおよびそのデータに関連付けられている操作から構成される .NET Framework クラスのインスタンスです。言い換えると、オブジェクトとは、プロパティ (特性のようなもの) とメソッド (オブジェクトに対して実行できるアクション) を持つデータ エンティティであると考えることができます。

っていう文。この文で言い換えられた文の方が専門的過ぎて、元の文より意味が分らない。データエンティティって何なのさっ、プロパティやメソッドよりもよっぽど説明がいる言葉じゃないの?なんで言い換えて混乱させるようなことをするのかって。とか、



より重大なエラーの場合はコマンド処理が中止されます。このようなエラーは、"終了エラー" と呼ばれます。終了エラーが発生すると、コマンドの処理は中止されます。たとえば、無効なデータを送信した場合や、コマンドを実行するのに必要なアクセス許可がない場合、Windows PowerShell は、未終了エラーを生成します。


って「無効なデータを送信したとき」は終了エラーなのか未終了エラーなのかわからない




そういえば、ファーストステップガイドにあったけど、起動は、「スタート」→「すべてのプログラム」→「アクセサリ」→「Windows PowerShell」で起動するものみたい。「管理ツール」からいくものは、管理するためのものだから、UACが働くだけだったみたい。

やっぱりパイプでオブジェクトを引き渡すってちょっと違和感がある。慣れていないだけかもしれないけど、処理の主体が分らなくなるような予感がします。

Windows PowerShellを入れてみた

Vista用のPowerShell 2.0が出ていたのでインストールしてみた。

スタート→すべてのプログラム→管理ツール→Windows PowerShell Modules
UACに応答して起動

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

警告: スクリプトの実行がシステムで無効になっているため、ファイル
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDiagnostics\PSDiagnostics.psm1
を読み込めません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。
PS C:\Windows\system32>

初期設定が必要のようです。早速歌い方について、、

PS C:\Windows\system32> get-help about_singing
Get-Help : トピック "about_singing" のヘルプが見つかりません。
発生場所 行:1 文字:9
+ get-help <<<< about_singing
+ CategoryInfo : ResourceUnavailable: (:) [Get-Help]、HelpNotFoundException
+ FullyQualifiedErrorId : HelpNotFound,Microsoft.PowerShell.Commands.GetHelpCommand

PS C:\Windows\system32>


あれ、歌い方を調べろって言われたから調べてみたのに。。。
気を取り直して、、、調べてみると、、こんな感じ。

PS C:\Windows\system32> get-executionpolicy
Restricted
PS C:\Windows\system32> set-executionpolicy remotesigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
PS C:\Windows\system32> get-executionpolicy
RemoteSigned
PS C:\Windows\system32>

とりあえず再起動
PS C:\Windows\system32> exit

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Windows\system32>

警告は消えた。


さて、VBやVBSやVBAに乗り遅れたけれど、PowerShellには乗り遅れたくないので2.0からだけどインストールしてみました。

LINQよりは使う頻度が高そうだし、今後もWindowsから離れることは無いと思うので。

2009年11月1日日曜日

映画を見てみようかな

最後に映画館に入ったのはもう5年以上前だけど、久しぶりにこの映画を見てみようかな?
http://black-genkai.asmik-ace.co.jp/

ブラック度検定では、0%だったんだけどね。

DB設計その2

その昔、大量の件数が入っているテーブルデータのものに、別のデータを載せなきゃいけないことがありました。でもそのデータっていうのは元データの生成/消滅タイミングが違っていて、生成確率も違うものだったんです。

例えば架空の図書館システムだと、以下のテーブルに、

所有図書(所有図書ID,状態,.....)

貸出状態をつけちゃったようなもの。

所有図書(所有図書ID,状態,...,貸出日時,貸出会員ID)

実際には、図書の貸出なんて所有図書の1%以下となるので、こう作るべきだったような気がします。

所有図書(所有図書ID,状態,...,)

現在貸出(所有図書ID,貸出日時,会員ID,貸出時状態,貸出時備考)


もし、履歴が必要なら追加でこんなテーブルかな?

貸出履歴(所有図書ID,貸出日時,会員ID,貸出時状態,貸出時備考,返却日時,返却時状態,返却時備考)


。。。やっぱり、自分の所為(せい)にして、記事を書くモチベーションを保てるほど、できてないや。元ねたが他人と絡む技術情報についての記事件数が少なくなっちゃうんだろうなぁ。