技術メモ

【C#】Windowsの環境変数の値を取得する

コマンドプロンプトでsetコマンドを実行した際と同じ値をC#で取得する場合のコードは以下の通り(実際に試して値が一致したことを確認した)

echo %APPDATA% と同じ結果

Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));

取得される値:C:¥Users¥(ユーザー名)¥AppData¥Roaming

echo %LOCALAPPDATA% と同じ結果

Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));

取得される値:C:¥Users¥(ユーザー名)¥AppData¥Local

echo %USERPROFILE% または echo %HOMEDRIVE%%HOMEPATH% と同じ結果

Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile));

取得される値:C:¥Users¥(ユーザー名) 

 

【SQL Server】記号が含まれる文字を検索できない

例えばA5M2でエクスポートしたExcelファイルのデータをそのままSQL ServerにインポートするとNULL値が、「« NULL »」という文字列で保存されてしまうことがある。

このとき、対象のレコードを抽出したい場合に以下のようなSQLを書いても取得できない。

SELECT
	* 
FROM
	TABLE_NAME
WHERE
	FIELD_NAME = '« NULL »'

この場合は、検索したい文字列の先頭に「N」を付ければOK

SELECT
	* 
FROM
	TABLE_NAME
WHERE
	FIELD_NAME = N'« NULL »'

なので、Updateしたい場合も以下のように書けばOK

UPDATE TABLE_NAME
SET
	FIELD_NAME = null
WHERE
	FIELD_NAME = N'« NULL »'

※データ型がnvarcharの場合

 

【Windows Bat】特定のページを指定したブラウザで開く

それぞれのEXEとURLを指定し、startコマンドで実行してあげればOK

echo Chromeで開く
start "" "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://www.google.com/

echo Edgeで開く
start "" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://www.google.com/

echo Internet Explorerで開く
start "" "C:\Program Files\Internet Explorer\iexplore.exe" https://www.google.com/

【C#】PictureBoxに画像をドラッグ&ドロップできない

原因

  1. AllowDropがtrueになっていない。
    フォームロードで「this.pictureBox1.AllowDrop = true;」を記載する
  2. Visual Studioを管理者で起動している。
    以下のようにタスクバーに「(管理者)」と記載されている場合は、ドラッグ&ドロップできない。一般ユーザーでVisual Stdioを起動すればOK。

【Windows Bat】プログラムを強制終了させる

次のnotepad.exeの部分を書き換える

taskkill /im notepad.exe /f

実行すると強制終了したプログラムのプロセスIDも含めて表示される(以下の例は2つ起動中であった場合に両方とも終了された例)

成功: プロセス "notepad.exe" (PID 15660) は強制終了されました。
成功: プロセス "notepad.exe" (PID 5492) は強制終了されました。

なお、該当するプログラムが起動中でない場合は「エラー: プロセス “notepad.exe” が見つかりませんでした。」といった文字が返る

 

参考

【Windows Bat】プログラムの起動時間とプロセスIDを取得する

【Windows Bat】プログラムの起動時間とプロセスIDを取得する

次のnotepad.exeの部分を書き換える

wmic process where 'name="notepad.exe"' get name,creationdate,processId

実行結果は以下の通り(起動日時、EXE名、プロセスIDが返る)

CreationDate               Name         ProcessId
20211202103244.517899+540  notepad.exe  11476

EXEが1つも起動していない場合は、「利用できるインスタンスがありません。」という文字が返ってくる

 

参考

【Windows Bat】プログラムを強制終了させる

【SQL Server】1~500までの連番のレコードを生成する

使う機会があるか分かりませんが、テストで大量のユニークなレコードが欲しい場合とかに役に立つかも…

with allNumber as (
	/*1~500までの連番のレコード生成*/
	select 1 as no
	union all
	select no + 1
	from allNumber
	where  no < 500
)

select
  no
from allNumber

/*再帰の上限がデフォルトで100までなので、上限無し(=0)に変更*/
OPTION ( MAXRECURSION 0 )

 

 

【Windows】パソコンの起動日時を取得する

コマンドプロンプトにて「systeminfo」を入力してEnterキーを押下する。

プロセッサ情報を読み込んでいます… などがしばらく表示されるので終わるまで待つ。

完了後、「システム起動時間: 2021/11/17, 18:46:02」というように表示される。

これ以外に以下のような情報も取得できる(一例)

  • ホスト名
  • OS名
  • OSバージョン
  • 最初のインストール日付
  • プロセッサ
  • BIOSバージョン

【SQL Server】ビット演算(AND,OR)を行う

/*
 1111111100000000 FF00(16進数)
 1110101011011011 60123(10進数)
--------------------------------------
 1110101000000000 59904(10進数) AND演算結果
 1111111111011011 65499(10進数) OR演算結果
 */
select
	CAST(0xFF00 as int) & 60123 as [AND演算],
	CAST(0xFF00 as int) | 60123 as [OR演算]

&(AND)と|(OR)の記号を利用する。

上記の例では、見やすいように16進数で記載する例も併せて載せている

 

【C#】XMLの予約語をエスケープする&元に戻す

エスケープする際には

System.Security.SecurityElement.Escape("<aaa>");

を利用する。

エスケープされた文字列を元に戻すには

System.Net.WebUtility.HtmlDecode("&lt;aaa&gt;");

を利用する。

違うクラスなので不安になるが、少なくともエスケープが必要な次の4つの文字

< > ” ‘ 

で問題なくデコードされた。