2008年10月9日木曜日

構成ファイルの内容を動的に変更しようとして、以下のコードを実装した。

Properties.Settings.Default.hoge = "テストのため変更";
Properties.Settings.Default.Save();

が、しかし、hoge.exe.config に変更が反映されておらず悩んでいたのだが、実はローカルユーザーごとのアプリケーションフォルダに user.config として配置されている。しかも、Save メソッドによって変更を保存した項目のみが書き込まれる。

ユーザーアカウントの考え方をきちんと理解できてないからか、そんな場所にあるとは想像もつきませんでした。

アプリケーション設定を活用するには?

ユーザープロファイルの削除

※ 現職場限定の発生事例です。

ドメインに参加してる状態で IIS の Web サイトにアクセスした際に、ユーザ ID とパスワードを入力してサイトを開いていたが、ID とパスをどこかで間違ったまま保存してしまったのか、SVF を利用した印刷ができなくなってしまった。(別のアカウントでログインすると上手くいく)pdf 表示や wpf ファイルの作成まではできていたのだが・・・。やむなくユーザープロファイルを削除した結果、うまく印刷できるようになった。レジストリに情報でも蓄積されていたのだろうか。VISTA だからなのかなぁ。

不要になったユーザープロファイルを削除する

2008年9月17日水曜日

SQLServerの論理ファイル名について

hoge データベースのバックアップを hoge_Test データベースに復元する際、データベースファイルとログファイルの論理名は、共に hoge データベースのものとなってしまう。
これを変更するには、以下のクエリを実行すると良い。

ALTER DATABASE <DB_NAME> MODIFY FILE (NAME = <current_name>, NEWNAME = <new_name>)

長い間ほってらかしにしてた事項やったなぁ・・・。

2008年9月12日金曜日

XSDを利用した型付データセットについて

XML に対して XSD を有効にするためには、 XSD の targetNamespace プロパティに指定した名前空間を、XML のxmlns 属性に指定する必要がある。
ただし、タグに属性を含める際は と記述する必要がある。

@IT の解説には、属性のネームスペースまでは書いて無かったんやけども・・・。

2008年5月14日水曜日

Downloaded Program Files 内のdesktop.ini について

Downloaded Program Files フォルダは、”ファイルを開く”ダイアログのフォルダ一覧に表示されないため、そのフォルダ内の desktop.ini ファイルを選択して開く事ができない。

そのため、

\WINNT\Downloaded Program Files\desktop.ini

とファイル名に直接パスを指定する事で開く事ができる。

また、開いたファイルの CLSID をコメントアウト? すると、ActiveX の展開されたファイルを確認する事ができる。

まあ、滅多に中身を見る事は無いとは思うけど・・・

2008年5月11日日曜日

Trac導入時におけるApacheのポート番号について

毎回同じ事でつまずいてるような気がするので・・・。

Trac月で Windows 環境にインストールを行なった場合、 Apache で利用するポートと IIS で利用するポートが競合してしまうらしく”http://localhost”の URL でTrac月のデフォルト画面が開けなくなってしまう。

$\TracLight\apache2\conf\httpd.conf の Listen 項目に固定のポート番号を指定してやると良いみたい。

新しいTrac月だとその点は改善されているんだろうか・・・。

Apache の Listen ディレクトリ

2008年3月5日水曜日

MS DTC のトランザクション分離レベル

SQLServer では ReadCommitted を指定しているにも関わらず、やたらとブロックが発生してしまうと言う現象があった。

その原因は以下の通り↓
COM+ が MS DTC トランザクションの接続に参加すると、トランザクション分離レベルが Serializable に設定されます


確かに分散トランザクションとするために、サービスコンポーネントを COM+ 登録してるけれども、まさか既定が Serializable だったとは・・・。
SQLServer のデフォルトが ReadCommitted なんだから、合わしておいてくれよって感じです。

2008年3月4日火曜日

IEをメニュー無しで開く

iexplore.exe -k として実行すると、メニューやステータスバーが無い状態で IE が開く。

URL の入力は Ctrl+o
IE を終了する時は Ctrl+w

取り敢えず、こんな事もできるんや~程度で。

2008年3月1日土曜日

SQLServer2000からSQLServer2005へのバックアップ復元について-その2

今の現場では、ローカル環境、検証環境、受入環境それぞれに SQLServer が存在しており、DB のデータをバックアップから復元する事も多々ある。しかし、ある環境で取得したバックアップを、別の環境へ単純に復元しただけでは使用できず、いつも「おまじない」と言われているクエリを実行していた。

おまじない:
EXEC sp_change_users_login 'Update_One','不明なデータベース ユーザー名','新しいログイン アカウント名'

今一、理由がわからず、「SQLServer のバグかね」等と言っていたのだが、何の事は無い、ここに詳しい説明が書いてあった。
SQL Server 2005 Tips and Tips

なるほど、サーバー間での SecurityID(ログインアカウントに対して内部的に割り当てられたもの) は転送できないと。

しかし、こんなページがあったとは・・・MSの技術資料って何であんなにわかりにくいんだろうか、色んな意味で。

SQLServer2000からSQLServer2005へのバックアップ復元について

ファイルとファイル グループのバックアップは、そのファイルやファイル グループが所属していたデータベースにのみ復元できます。

いや~、これを知らずに何度も何度も SQLServer2000 のバックアップファイルを SQLServer2005 に復元しようとして失敗しまくり。「別のデータベースを含んでいます」オンラインだたよー。

復元するためのメニューとしては、この「ファイルとファイルグループ」と言うのと「データベース」と言う項目があったけど、 GUI の表示内容が酷似してて、違いに気付かなかった・・・。
「2000 の時もファイルから直接復元してたじゃないかー」と思ってたら、デバイスから復元してた事に今気付いた。そうか、意味が違うのか・・・って気付くの遅すぎ。

結論としては、「データベース」メニューから復元しろって事ですな。

2008年2月29日金曜日

DataTable.Select メソッドでシステムエラー発生

DataTable 内に RowState が Unchange の行と Added の行が存在する場合に、DataTable.Select メソッドを実行すると、”アクセスするOriginalデータがありません”と言われてシステムエラーとなる。もちろん、Modified と Added が混在する場合も同様。(Unchange と Modified については未検証)
ただし、全行が同一の RowState である場合は、DataTable.Select メソッドは成功する。

DataGrid に追加された行に連番を振ろうとして DataTable.Select(hoge = Max(hoge)) としてたのだけど、結局、hoge 列の値を全て List に突っ込んでソート・・・なんだかなぁ。

2008年2月26日火曜日

Windows認証でのDB接続文字列

普段仕事場では接続文字列としてユーザーIDとパスワードを指定しているため、

"Data Source=DBServer;Initial Catlog=pubs;User ID=XXX;Password=hoge"

と記述している。

しかしセキリュティの観点からすると、Windows認証を用いてDBへ接続すべきで、
その場合の記述は以下の通り。
"Data Source=DBServer;Initial Catlog=pubs;Integrated Security=SSPI"
Integrated Security を SSPI または true に設定することで Windows 統合認証でアクセスすることができる。」のだそうで。

初めてやってみたけど、ちゃんと接続されると嬉しい^^

2008年2月23日土曜日

DataTable.Select メソッドでの集計関数の使い方

データテーブルからMAX値を取ろうとして以下のように書いたのだけれど、

DataTable dt = new DataTable()
DataRow[] rows = dt.Select("Max(ID)")

” Boolean 型はうんぬんかんぬん・・・”と言ったエラーが出て全然上手くいかない。

困り果てて @IT を見てみると、

DataRow[] rows = dt.Select("ID = Max(ID)")

なんだそうで。条件句を指定する場合と同じ記法でした。
これで全体の中でMax値を持った行コレクションが返ってきます。

DataColumn.Expression プロパティのページ見ても分からなかったよ・・・orz

2008年2月22日金曜日

WebServiceとして定義されているメソッドの引数の型について

自分で作成したクラスを WebService として定義されたメソッドの引数とした場合、実際にアプリケーションから呼び出そうとすると、 WebReferences 配下のフォルダ名が、その引数のネームスペースとして先頭についてしまう。これは VisualStudio が Reference.vb を自動生成した事による。回避策としては、 Reference.vb ファイルを手動で書き直すこと。

ex)

自作クラス:Nao.Hoge
WebServiceメソッド:GetName(Nao.Hoge obj)
WebReferences 配下のフォルダ名:Men

とした場合に、

Nao.Hoge obj = new Nao.Hoge()

GetName(obj)

とするとエラーとなってしまう。

Reference.vb 内で、 GetName(Men.Nao.Hoge obj) と定義されているため。

どうやら ArrayList 型を引数としても、Object 型に自動変換されるようで・・・。加えて、引数の型をスーパークラスとして、実際にはサブクラスを引き渡した場合も、型が不一致のためエラーとなってしまいます。

WebService にポリモーフィズムの概念は無いのかな???

2008年2月21日木曜日

ノータッチデプロイメントでのアセンブリのダウンロード先

Gacutil.exeでダウンロードされたファイルを確認したのは覚えていたんだけど、グローバルアセンブリキャッシュには無い。じゃあ実際はどこにあるのかと言うと、アセンブリダウンロードキャッシュってとこに配置されるんだと。
.NETアプリケーション自動更新技術の比較

Gacutil.exeはグローバルアセンブリキャッシュのみを対象にしてると思ってたけど、/ldl オプションを付けて実行すると、ダウンロードされたファイルのキャッシュが表示されます。
グローバル アセンブリ キャッシュ ツール