checkpoint

自分用のIT技術系ノートです。古い情報や間違っている情報もあるので注意。

リフレクションを使って(ジェネリック)メソッドを実行する

public static string TestMethod1(int input) { return "Test Method 1 : " + input.ToString(); } がProgramクラスにある場合、これをリフレクションを使って呼び出すには var mi = typeof(Program).GetMethod("TestMethod1"); var ret = mi.Invoke(null, …

ClickOnceで起動時エラー

(問題) このアプリケーションをインストールまたは実行できません。このアプリケーションでは、まずグロバール アセンブリ キャッシュ(GAC)にアセンブリ <名前・バージョン> をインストールする必要があります。このアプリケーションをインストールまたは…

datetime型から時刻を取り去るいくつかの方法

SQL Serverでdatetimeから時刻を除去したいときってありますよね。 「本日0時時点のdatetime型データが必要!」というような場合、どのような方法が考えられるでしょうか。 SQL Server 2008の場合 SQL Server 2008では「date型」「time型」という新しいデー…

SELECT INTO句で一時テーブルを作成した場合、SELECTに空文字を指定しているとエラー(2000まで)

最近遭遇した謎なエラー。 SELECT '' AS col1 INTO #T このようなSQLを実行すると、以下のようなエラーになりました。 列 'col1' の幅が無効です: 0。 ところが同じSQLを別のSQLサーバー(2005)で動作させると正常終了。どうやらSQL Serverのバージョンが20…

(v1.1対象)StringDictinaryのKeyは強制的に小文字にされる

久しぶりにメモっぽくブログ更新。 StringDictionary クラス (System.Collections.Specialized)は、Stringを扱うDictionaryが必要な場合に使ったりします。 Hashtable クラス (System.Collections)と違ってキャストが必要ないから。しかしここで思わぬ落とし…

FakeWorkTable

SQL Server 2005 + .NETアプリでこんなエラーが出たよ! System.Data.SqlClient.SqlException: 4 バイトの内部オーバーヘッドを含めて、最小行サイズが 16017 になるので、テーブル 'FakeWorkTable' を作成または変更できませんでした。このサイズは、テーブ…

FlagsAttributeの使い方

列挙型にFlagsAttributeを付与すると、フラグとして扱うことができます。 [Flags] public enum Color { Red = 1, Blue = 2, Yellow = 4, Green = 8, } 値は2の累乗になるようにします。フラグの立て方。(RedおよびBlue) Color c = Color.Red | Color.Blue…

Identity値を取得する3つの方法

SQL Serverで主キーなんかに使う型でIdentityってありますよね? IDとして自動的に連番を振り出してくれるヤツ。 自動的に付与される値なので(普通は)明示的に指定することができません。 行を登録した後に取得することになりますが、その際に利用できる構…

Developers summit 2010に参加しての個人的なまとめ(二日目)

デブサミから1ヶ月過ぎちゃいましたけど、いかがお過ごしでしょうか。 個人的なまとめ二日目編、後日後日と思っていたらいつの間にか3月が終わろうとしていました。 いつものことです。 まさに先延ばしの人生。 でもこれは個人的なまとめなので別にいいんだ…

Developers summit 2010に参加しての個人的なまとめ(一日目)

先日初めてデブサミなるイベントに参加してきました。 世界は変わった。開発の現場はどうか? Developers Summit 2010 日本のソフトウェア開発者が集まるこのカンファレンス。今年で7回目の開催だそうです。 というわけで参加セッションと次回参加に向けての…

Convert.Int32(String)とInt32.Parse(String)

文字列を整数に変換したい場合に用いるメソッド二種類。 どう違うのかぱっと見分かりません。MSDNのConvert.Int32の項を見てみると… 戻り値は、value に対して Int32.Parse メソッドを呼び出した結果得られる値です。 とのことなので、内部的にはInt32.Parse…

ADO(.NET) + SQL Serverでパラメータークエリを使った場合、ローカル一時テーブルが作成出来ない

最近職場の人が言っていた件。自分も前にこれでかなり悩んだものです。 PRB: ADO のパラメーター化されたクエリを使用すると SQL Server のローカル一時テーブルが作成されません。 ADO.NET 1.1 でも再現するこの現象。例えば以下のようなパラメータークエリ…

SQL Server 2005でデータベースから特定の名前の列を探すSQL

データベース内からある名前の列を探したい、しかしどのテーブルにあるかわからない、という場合がしばしばあります。ドキュメントがちゃんと作成・保守されていればそれを見れば済むことなのですが、「テーブル定義書?なにそれ」「E-R図?おいしいの?」な…

メソッドのオーバーロード作成時にありがちなバグ

例えば、下の様なメソッドがあって public void ExampleMethod(string param1, int param2) { (省略) } これに、引数が「param1」だけのオーバーロードを作るとします。 その場合正しくは、 public void ExampleMethod(string param1) { this.ExampleMetho…

カンマを含む数値文字列をdecimalにキャストするとエラー

Transact-SQL内で文字列を数値にキャストすることはよくあると思いますが、'10,000'みたいに、桁区切りのカンマが入っている場合も多いでしょう。 カンマが入っていてもISNUMERIC関数でTrueが返されます。 しかしこれをこのままdecimalにキャストしようとす…

usingを使え!

IDisposableインターフェイスを実装したオブジェクトを利用する際、usingステートメントを利用するのはもう常識ですね。usingが分からないC#プログラマはすぐにGoogle先生に聞いてください。数分でわかるはずです。ジョエル・スポルスキー風に言うと「分かる…

ADO.NET経由でSQLがデッドロックになった場合、SqlCommand.ExecuteReaderメソッドがエラーにならないことがある件

やばい、これ今日初めて知ったんだけど。というか、このせいで半日くらい潰されました。MSDNにもしっかり書いてありますね。引用。 トランザクションがデッドロック状態になると、 Read が呼び出されるまで、例外はスローされない可能性があります。 Framewo…

framework1.1で構成ファイルにカスタムセクションを設定

App.configとかWeb.configとかに好きな形式で好きな設定を好きに設定したい。そのような場合にはIConfigurationSectionHandlerを実装したクラスを作りましょう。Createメソッド一個を実装すればいいので簡単じゃよね!section引数に指定したセクションのXmlN…

ソースコードの中にSQLを書く場合

ソースコードの中にSQLを書く場合、これは文字列になるので sql = @"SELECT * FROM hoge WHERE fuga_id = 1"; みたいに書くのを推奨している参考書とかは多いです。 が、個人的にはこちらのほうがよいと思います。 sql = " SELECT " + " * " + " FROM " + " …

XmlSerializerで作成したXMLを加工してからファイルに書きこみたい

と、思ったので、XmlSerializer.Serializeメソッドの引数にMemoryStreamを放り込んでStreamReaderで読めばOKじゃよね! とか言いつつサンプルコードを書いてみたのですが、最終的にできあがったファイルに元オブジェクトの情報が全然書き込まれてませんでし…

(メモ)引数の名前を取得する

System.Reflection.MethodBase.GetCurrentMethod().GetParameters()

排他ロックされません

SELECTを投げるとき、インデックスのみの検索で事足りる場合は、インデックスにしかロックがかかりません。 この場合は、ヒントで排他ロックをかけるよう指示していたとしても実データにロックをかけてくれません。 項目の多いカバリングインデックスなんか…

ど忘れし易い関係代数おさらい

集合演算4種 和集合演算 記号は∪。これはあれ、要するにUNION。UNION ALLじゃないことに注意しましょう。(重複は除かれる) 表の構造が同じでないとダメです。 差集合演算 記号は−。これはあれ、要するにNOT EXISTS。R-Sとすると、RからRとSの共通部を除い…

正規化(第一正規化〜ボイスコッド正規化)

このままDB試験のことについて何も書かないのもアレなので、正規化のおさらい。 非正規化→第一正規化 あのー、あれ。Excelで行をマージしまくった表を、全部解除して単純にするようなイメージ。一行一データ。みたいな。 第一正規化→第二正規化 全ての非キー…

WindowsフォームのShowとShowDialogの違いについて

今更感たっぷりですが、Showの場合はフォームを閉じるとDisposeメソッドが呼ばれ、 ShowDialogの場合はフォームを閉じてもDisposeメソッドは呼ばれません。結局はusingを使えということで。

基になるRCWから分割されたCOMオブジェクトを使うことはできません

COMオブジェクトの解放後に何らかの操作をしようとした場合に発生。 たいていはCOMオブジェクトのリリースタイミングにバグがある。 そうでないなら、COMオブジェクトを生成したスレッドとは別のスレッドから使用しようとした際、作成元のスレッドが既に無く…

ACCESSで複数行同時INSERT

先ず、1行だけのテーブルを用意する。 これはダミー。テーブル定義などはなんでもいい。とにかくデータが1行だけ必要。 ・TblDummy 以下のようにUNION ALLを使用してINSERT分を組み立てる INSERT INTO TblDestination (Col1, Col2, Col3) SELECT * FROM [ SE…

(VS2003).NETのソリューションをVSSのソース管理から外す方法。

1.ソリューションのフォルダ以下全てのファイルの読み取り専用属性を外す。 2.*.vssscc, *.vspscc, *.sccなどのファイルを全て削除 3.各プロジェクトファイルをテキストエディタで開き、以下の部分を削除。 SccProjectName = "???" SccLocalPath = "??…

オブジェクトの複製(ICloneable)

オブジェクトの複製(クローン)を作成したい場合、 別の変数に代入するのでは参照をコピーしているだけなので当然ダメ。 別のインスタンスを作成してフィールドの内容を全てコピーすればいいが、 手間がかかりすぎるし、変更に弱いので現実的な方法ではない…

コンストラクタからコンストラクタを呼ぶ

簡単なことですが、忘れがちになるので。コンストラクタから、オーバーロードされた コンストラクタを呼ぶ場合thisキーワードを使用する。 public class ExClass { public ExClass() { //処理A } public ExClass(string paramOne) : this() { //処理B //この…

キャッシュのクリア

クエリのパフォーマンス計測に。DBCC DROPCLEANBUFFERSデータバッファキャッシュをクリア。 結果セットをキャッシュから再利用されたくない場合に使用。 DBCC FREEPROCCACHEプロシージャキャッシュをクリア。 SQLステートメントがキャッシュから再利用されず…

IN句に列名を使う

SQL

IN句と言えば下記のように使用するが SELECT * FROM TBL1 WHERE TBL1.COL1 IN (1, 2, 3... このような使い方もできる SELECT * FROM TBL1 WHERE 1 IN (TBL1.COL1, TBL1.COL2... 多くのテーブルを結合し、OR条件が多くなりそうなときにどうぞ。

foreachと構造体

.NETの構造体は値型。これ基本。 しかし油断しているとつい下記のようなことをしてしまう。 //構造体 public struct ExampleStruct { public int Number { //get,set... } private int number; }//構造体利用側 ... private ExampleStruct[] exstrArray = ne…

トランザクション分離レベルとロックヒント

トランザクション分離レベル READ UNCOMMITTED 共有ロックをかけない。ダーティリード可。 READ COMMITTED (SQL Serverデフォルト) リソースを使用してるときだけ共有ロックをかける。反復不可能読み取り。 REPEATABLE READ トランザクションの終了まで共有…

条件付きコンパイル

プロジェクトのプロパティから条件付コンパイル定数を設定。 (既定でDEBUGとTRACEは入ってる) #if DEBUG //Code for debug #elif TRACE //Code for trace #else //Code for release #endif こんな感じでOK。ネストもできる。 メソッドまるごと条件付にした…

datetime型の精度

SQL Serverのdatetime型の精度は3.333..ミリ秒。 下一桁が0,3,7の順に進んでいく。 従って、>= '2005/11/25 00:00:00' AND とか BETWEEN '2005/11/25 00:00:00' AND '2005/11/25 23:59:59' とか指定していると、'2005/11/25 23:59:59.237'などと なっている…

CASE式

これもいざ使おうという時に限って微妙に構文を忘れてたりする。 CASE 式 WHEN 式 THEN 式 ... [ELSE 式] END CASE式=WHEN式のとき、THEN式が返される。 CASE WHEN 条件 THEN 式 ... [ELSE 式] END WHEN条件が真のとき、THEN式が返される。

ADOのRecordsetで重要な3つのプロパティ

いまさら感たっぷりのADO・Recordsetの忘れてはいけない3つのプロパティ。 CursorLocation adOpenServer(サーバーカーソル)=2 サーバー側に結果セットを保持。 adOpenClient(クライアントカーソル)=3 クライアント側に結果セットを保持 CursorTypeは静的…

デリゲートとイベント

C#

なんだかんだでいざ使う時には忘れてたりするので、一般的な使い方。//eventargs public class MessageDisplayEventArgs : EventArgs { public MessageDisplayEventArgs(string _message) { this.message = _message; } public string Message { //get... } …

指定セルに同時に同じ値を入力したい

CTRLでセルを順番に指定して、最後のセルで値を入力後 CTRL+RETURNで全てのセルにその値を入力できる。 いつ役に立つかは不明。

SQL ServerへADO.NETアプリからの接続エラー

職場でよく知らない人からアプリが動かないと連絡あり。 とりあえずエラーメッセージを送ってもらうと、 SQL Serverが存在しないか、アクセスが拒否されました どうも接続を開けようとして失敗しているみたい。 ネットワーク的には問題なし。他に同様の症状…

SQL Serverから別のデータソースにアクセス

OPENQUERY(サーバー名,'ステートメント') リンクサーバーの設定が必要 OPENROWSET('OLE DBプロバイダ名','データソース名';'ユーザーID';'パスワード','ステートメント'もしくはテーブル名) セミコロンの位置に注意 INSERT INTO OPENROWSET(...で書き込み可…