2009年11月15日日曜日

画面回転

びっくりした。
Vistaでは、[Ctrl]+[Alt]+矢印で、画面が回転するんですね。[Ctrl]+[Alt]+↓で、画面が逆さになったときにはどうしたものかと思っちゃいました。

それはそうと、Vistaって、[ネットワークプロジェクタへの接続]ってありますが、ネットワークプロジェクタのサーバソフトって無いかな?とか、RDPのプロトコルを実装しているクラスライブラリがないかなぁ?

メモ

マイクロソフトがリリース元のソフト
Process Explorer
Paint.NET


MSDN
http://msdn.microsoft.com/ja-jp/library/default.aspx

マイクロソフト テクニカルドキュメント
http://msdn.microsoft.com/ja-jp/library/bb905071.aspx

2009年11月14日土曜日

C#の仕様書を印刷してみた

Visual Studio2005から、C#の1.2と2.0の仕様書を印刷してみた。
中閉じ、とじしろ10mmで約120枚。
印刷して、中央で切って、のり付けして、ハンドドリルで穴をあけて、針金を通して製本テープで留めてみた。
製本はできたけど、切ったときちゃんと中央で切れていなかったのか、背の部分がガッタガタ。

http://www.geocities.jp/ryou_tanoue/

のページをみると、平とじっていう方法みたい。

他に、糸かがりとじっていうのがあるので、今度C#3.0の仕様書を印刷するときにやってみよう。
多分印刷するときに、分冊指定,5枚ごとにすれば多分よさそう。
綿糸は、裁縫のときに使う糸、麻糸は、タコ糸でいいのかな?

2009年11月11日水曜日

SQL Server 2005の表データをコピペしてExcelに貼り付けるときは

SQL Server Management Studioで、オブジェクトエクスプローラから「テーブルを開く」で、表示されたテーブルデータで左上見出し行の行番号列の交差する灰色文字なしの部分をクリック→コピー→Excelで貼り付けとすると日本語が文字化けする。

SQLのselect文の結果をコピペすると文字化けしないのに。。。

で、文字化けする場合は、形式を選択して貼り付け→Unicode テキスト で貼り付ければいいらしい。

http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/7752ea7b-0e2c-4562-a823-a68dbee1e22a


別に、形式を選択して貼り付け→テキスト でもいいと思う。
そもそも、デフォルトでHTMLで貼り付けしようとしているのが間違いのような。。。

範囲指定の日時について

画面で、A時点からB時点までという絞り込みを行う際、
日付と時間を指定しますが、とある画面では、範囲指定に、時刻を省略できるものがある。
省略した場合、どのように扱えばいいんだろう?人によって範囲内外の考え方は違うんじゃないのかな?

例えば、範囲を2009/11/10 10:00~2009/11/11 11:00と指定した場合、2009/11/11 11:00:05は範囲内?範囲外?

例えば、範囲を2009/11/10 ~2009/11/11と指定した場合、2009/11/11 00:00:00は範囲内? 2009/11/11 00:00:01は? 2009/11/11 14:20は?

境界値の扱いも難しいのに、境界が幅を持っていた場合、さらにややこしくなる。
一般的な範囲の考え方ってどういう風なんだろう?

時刻切り捨ての日付比較のsql文

時刻を無視して、日付だけでシステム日付と比較するSQL

SELECT COL_1,COL_2,...
FROM TABLE_1
WHERE
CONVERT(char, TABLE_1.LastReportDateTime,111) <= CONVERT(char, DATEADD(d, -7, CURRENT_TIMESTAMP), 111)
みたいなものを昔書いた覚えがあるけど、今考えると効率面でよくなかったですね。
問題は2点。TABLE_1の全行に対して、CONVERT関数を呼び出していることと、関数を呼び出した後の比較のため、インデックスが張ってあっても、条件の絞り込みには使えないこと。

以下のように書けば、CONVERT関数を処理するのはCURRENT_TIMESTAMPの1件(SQL処理中はCURRENT_TIMESTAMPは固定値なので)でインデックスが張ってある時に範囲外のものは比較しないで対象外にしてくれそう。
SELECT COL_1,COL_2,...
FROM TABLE_1
WHERE
TABLE_1.LastReportDateTime < CONVERT(char, DATEADD(d, -6, CURRENT_TIMESTAMP), 111)

2009年11月8日日曜日

ADO.NETでのタイムアウト値のまとめ

ADO.NETでデータベースにアクセスするときこんなかき方をすると思います。

using (TransactionScope ts = new TransactionScope())
{
DataSet1.ProjectDataTable dt1 = new DataSet1.ProjectDataTable();
using (ProjectTableAdapter ta1 = new ProjectTableAdapter())
{
dt1 = ta1.GetData();
}
}
上のプログラムで、SQL Server に接続してデータを取るのですが、このときのタイムアウトは3種類あります。
1.トランザクション処理のトランザクションタイムアウト(デフォルトでは 60 秒) 参考:http://msdn.microsoft.com/ja-jp/library/ms973865.aspx

2.SQL Serverへ接続したときの応答待ちのコネクションタイムアウト(デフォルトで15秒)参考:http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectiontimeout(VS.80).aspx


3.SQLコマンドを実行したときの応答待ちのコマンドタイムアウト(デフォルト30秒)参考:
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.commandtimeout(VS.80).aspx

上のテーブルアダプタ操作でそれぞれのタイムアウト値を変更するのは以下の通り。


1.トランザクションタイムアウト変更

using (TransactionScope ts = new TransactionScop(TransactionScopeOption.Required,new TimeSpan(0,0,30))

2.コネクションタイムアウト変更
ta1.Connection.ConnectionTimeOut =10;
dt1 = ta1.GetData();
※TableAdapter.Connectionプロパティのスコープはinternalなので同一アセンブリからしか直接参照できない

3.コマンドタイムアウト変更
どうやら、コードを書かないと無理みたい。
http://gushwell.ldblog.jp/archives/50527778.html
で、CommandTimeOutのプロパティを外だしにして、

ta1.CommandTimeOut=60;
dt1 = ta1.GetData();