投稿

2015の投稿を表示しています

主キーの無いテーブルを探す方法

クラスタ化されていないインデックスが設定されていないテーブルを探すSQL。つまり主キーの無いテーブルを探す。

SQLの問い合わせをパラメータ化したときのNULLの扱い

SQLの問い合わせをパラメータ化したときにNULLを指定するときに、C#のnullは使えない。sqlString.Null や sqlInt.Null などを使う。 つまり、nullかどうかをチェックする必要があるということ。

SQLServer2005でのユニコードの扱い

これも今更だけど、SQLServer2005にユニコードのデータを登録する方法について調べたときに、参考にしたマイクロソフトのページ。 Microsoft SQL Server 2005 のインターナショナル機能

SQLServer2008 Expressをダウンロードするページ

今後、SQLServer2008をダウンロードすることも無いだろうけど、メモは残しておこう。マイクロソフトのダウンロードのページには、セットアップのファイルが3つある。

テストデータの作り方

イメージ
たとえば、0.01から2.00まで0.01刻みの200個のデータをSQLで作る手順。 ループを回すのではなく、テーブルをJoinして作るといい感じ。

ユーザー名を得る手順

ユーザー名を得る関数はいくつもある。 select system_user, user_name(), CURRENT_USER, ORIGINAL_LOGIN() Windows認証やSQL認証のユーザー名が欲しいときは、system_user を使うと良いみたい。

テーブルサイズを調べる手順

イメージ
テーブルの容量を調べるには、sp_spaceused を使う。 sp_spaceused テーブル名

終わらない

google+に溜めていたメモをブログに移しているのだけど、なかなか終わらないなあ。

Group Byで集計した内容をしりたいときは

イメージ
GroupByしたときに集計した内容を知りたいときは「for xml 」を指定すると、内容をXML形式でGETできる。

obj\Debug\xxx.exe" を "bin\Debug\xxx.exe" にコピーできませんでした。10 回の再試行回数を超えたため、失敗しました。

イメージ
ビルドすると「エラー 11 "obj\Debug\xxx.exe" を "bin\Debug\xxx.exe" にコピーできませんでした。10 回の再試行回数を超えたため、失敗しました。」となることがある。 デバッグ中にフォームの×印をクリックしてデバッグを終わらせて、次にデバッグしたら起きる模様。すごく面倒。タスクマネージャーを見ると、デバッグプロセスが動いているので、そのプロセスを終わらせれば、エラーは出なくなるが、これも面倒。

ローカルのソース管理の履歴はクラウドへは引越しできないの?

社内のソースコード管理で使っているterm foundation server (tfs)を、クラウド上の term foundation service にバックアップできたら安心と思うのだけど、データの移行方法がどこにも見つからない。 VSTFを使うときは、今までの履歴は捨てて、新規にやりなおそうということなのかしら? これまでの改修履歴を捨てるのは、なかなかつらい。

小数値を整数値へキャストするときは切り捨て

小数値を整数に変換するときに、キャスト(int)では切り捨てになるので注意。 (int) 3.9 // 3 Math.Round(3.9) // 4

ユーザコントロール上にマウスが入るとユーザーコントロールの色を変える手順

マウスが入った、出たのイベントに色を変えるコードを追加するまでは、すぐに思いつく。 MouseEnterとMouseLeaveのイベントに色を変えるコードを追加する。ここまでは簡単。

セットアップするとインストール先からファイルが削除されてしまう

セットアップすると、インストール先からファイルが消えてしまう謎な現象が発生する。 探してみたらこんなバグ情報が見つかった。ひとつ前のセットアップをVisualStudio2008で作ったのだったら、多分これが原因かな。

単体テストプロジェクトを使うときのメモ

VisualStudio2012でのメモです。2013も多分、同様。 テストをされる側のプロジェクトでinternalなメソッドを作っていて、これをテストしたいときは、下記の準備をすること。 namespace の前に「[assembly: InternalsVisibleTo("UnitTestXXX")]」を追加する。 次にusing System.Runtime.CompilerServices; を追加する。 参照設定にMicrosoft.VisualStudio.QualityTools.UnitTestFrameworkを追加する。

Loadイベント内での例外がキャッチできない

VisualStudio2013でデバッグしているときに、WinFormsのLoadイベント内で例外が起きてもキャッチできないみたい。 イベントの実行中にエラーが起きても例外を捕まえられないのでエラーが起きたことがわからない。そのままフォームが表示されるので、おかしなフォームが表示されて、はて?ということになる。 これはバグなのか、仕様なのか?

SQLServerへの接続文字列の暗号化

VisualStudioには、接続用の文字列をapp.configに暗号化して保存するというありがたい機能があるのだけど、暗号化したパソコンでしか複合できないという制約があるので、開発パソコン以外にセットアップする場合には使えない。たとえばパッケージソフトでは使えない。 残念。 接続文字列と構成ファイル (ADO.NET)

SQLの速度測定

SQLの問い合わせにかかる時間を調べる方法。速度測定。「SET STATISTICS TIME」を使う。SQL Server Management Studio を使えばもっといろいろ調べられるのだけど、SQLだけでできる方法も知っておいて困ることは無いし。

NULLをSumするとNULLになる

すべての値がNULLの場合、SUM関数はNULLを返す。0ではないので注意。COUNT関数だと0を返します。

Visual Studio Emulator for Androidのエラー

VisualStudio2015にはAndroidのエミュレータが付いたということで、試してみたところ、うまく動かないわけです。 2015/09/14 10:52:46: [Critical] An error occured while creating 'VS Emulator 7" KitKat (4.4) XHDPI Tablet' device. 2015/09/14 10:52:46: [Critical] XDE Path: C:\Program Files (x86)\Microsoft XDE\10.0.10240.0\xde.exe 2015/09/14 10:52:46: [Critical] XDE Arguments: /sku Android /displayName "VS Emulator 7\" KitKat (4.4) XHDPI Tablet" /memSize 1024 /diagonalSize 7 /video "1200x1920" /vhd "C:\Users\XXX\AppData\Local\Microsoft\VisualStudioEmulator\Android\Containers\Local\Devices\vhd\7_KitKat_(4.4)_XHDPI_Tablet\image.vhd" /name "VS Emulator 7-inch KitKat (4.4) XHDPI Tablet.videoshow" /noStart /silent 2015/09/14 10:52:46: [Critical] XDE Exit Code: InvalidArguments (3) Hyper-Vの仮想マシンを起動しようとしてエラーが起きているのか???くらいしかわからない。 期待していたのに、がっかり。

必要なバージョンの Microsoft Office アプリケーションがインストールされていないため、このプロジェクトをデバッグまたは実行することはできません。

イメージ
エクセルアドインのデバッグをしようとF5キーを押すと、出たのがこのエラー。 必要なバージョンの Microsoft Office アプリケーションがインストールされていないため、このプロジェクトをデバッグまたは実行することはできません。

エクセルのワークシート関数をC#で作成するには

調べたことをするすると忘れてしまうので、メモしておきます。 マイクロソフト的にはC/C++で作るのを推奨しているみたいで、C#で作る方法は見つからなかった。 ただ、エクセルのVBAを使えばC#で作ったメソッド関数を間接的に呼び出して、ワークシート関数のように使うことはできるようだ。

パス***の一部が見つかりませんでした

Directory.getfiles メソッドの注意点。 フォルダ名の末尾に全角空白が付いている場合(たとえば「あいうえお 」など)、末尾の空白は勝手にTrimされる。 「パス***の一部が見つかりませんでした」 という不思議な日本語のエラーメッセージが表示されたらこのパターンを疑いましょう。

flowLayoutPanelのコンテンツ間の隙間

flowLayoutPanelの中のコンテンツ間には隙間が空いている。この隙間を0にするには、それぞれのコンテンツでMargenプロパティを0にする。 まとめて設定する方法はないみたい。

WPFに無いもの

WPFのカレンダーコントロールは、.NET4.0から使える。.NET Framework3.5.1では使えない。悲しい。 それと、WPFのコントロールにはリンクラベルが無い。リンクを画面に表示したいときはどうするのだろう? そろそろWinFormsから切り替えていかないといけないと思うのだが、なかなかハードルが高い。

DataGridViewのメモ

イメージ
いろいろな技があるので、メモしておきます。データグリッドビューは設定プロパティが多すぎてどう影響しているのか、よくわからないところもある。

SQLでの四捨五入

小数値の四捨五入。round関数を使う方法のほかに、decimal型にcastする方法も使えそう。 select ROUND(12.543, 1), -- 12.500 ROUND(12.543, 0), -- 13.000 FLOOR(ROUND(12.5, 0)), -- 13 CAST(12.543 AS int), -- 12 切り捨て CAST(12.543 AS decimal(10)), -- 13 四捨五入 CAST(12.543 AS decimal(10, 1)) -- 12.5

Ownerプロパティを使っていると孫フォームのClosingイベントが発生しない

イメージ
FormにはOwnerという所有者プロパティがある。 フォームAを作るときに所有者プロパティにフォームBを設定しておくと、フォームBを閉じると自動的にフォームAも閉じてくれる。フォームBを最小化すると、フォームAも最小化される。 どういうときに使うのかといえば、メモ帳の検索ダイアログみたいなフォームを作りたいときだろうか。

ファイル名を一括変換する手順

イメージ
C#とは関係ないが、便利だったので、ファイル名を一括変換する手順を。 たとえば「abc_d001_xxx」のようなファイル(xxxの部分がここのファイルで違う)がたくさんあり、これを「abc_d002_xxx」に変えたいときは、MS-DOSコマンドのrenameを使うとできる。 rename *d001* *d002* これらのファイル名が こうなる。 これは便利!

トランザクション スコープを使うと分散トランザクションにされてしまう

データベースでトランザクションを実行するとき、C#ではTransactionScopeを使うと便利。 トランザクション スコープを使用した暗黙的なトランザクションの実装 デバッグしているときも、最後のCompleteメソッドを呼ばなければ、何も変わらないから助かる。

.NET Framework4のサポートは2016年に切れる

.NET Framework4のサポートが2016年に切れる件。 .NET Framework3.5.1はWindows7のサポート期限切れまで大丈夫らしいので、オリンピックの年までは大丈夫みたい。 Microsoft .NET Framework サポート ライフサイクル ポリシーの いつも通り日本語がおかしい。機械翻訳だからこんなものか。

MSDNのダウンロードが使えない

久しぶりに(2014年2月)MSDNからダウンロードしようとしたら、いつものダウンロードソフトの画面が出てこない。 InternetExprorerが11に上がったせいみたい。 下記のページにあるように、Ie9をエミュレートすればできた。 MSDN サブスクリプションの web サイトにいくつかのダウンロードを完了できません。 タイトルの日本語がおかしい、、、 Ie11は過去との互換性をかなり切り捨てたみたいだなあ。

テーブルの情報が保存されたシステムテーブル

テーブルの情報を得るシステムテーブルには、  sysobjects と  sys.objects と2つある。 紛らわしいので注意。

テーブルの列の情報

テーブルの列の情報は syscolumns テーブルに保存されている。 たとえば、すべてのテーブルに定義されているvarchar列を一覧するSQLは以下のような感じ。 select   name, object_name(id), type_name(xtype) from   sys.syscolumns where   object_name(id) like 'xxx%'   -- テーブル名で絞り込みたい and   type_name(xtype) = 'varchar' order by   id

リモートデバッグ

VisualStudio2013だと別のパソコンで動いているDLLをデバッグすることも簡単にできた。びっくり!素晴らしいなVisualStudio。 デバイスのリモート ツールのセットアップ

SQLServer2008のデータファイルのSQLServer2005にコピーしても

イメージ
SQLServer2008のデータファイルをSQLServer2005にコピーしても、参照することはできない。 こんなエラーがでる。

タブコントロールの隠れているページにあるデータグリッドビューの表示がおかしい件

イメージ
WinFormで作った画面で、タブコントロールの隠れているタブを開くと、そこに貼ってあるデータグリッドビューの表示がきちんとされていない(セルの色がついていない、列幅の調整がされていないなど)ことがある。 これは昔からあるバグみたい。 対策は、フォームのロード時に2ページ目のタブを無理やり表示するとよいみたい。         private void Form4_Load(object sender, EventArgs e)         {             this.tabPage2.Show();         }

エクセルで前ゼロが消える(「001」が「1」になる)問題への対処手順

データテーブルをエクセルに保存するソフトを考えていたら、「001」という文字列が「1」に変わってしまう問題に気がついた。エクセルだと、よくあるパターン。

フォームの表示位置を指定する

Windows Formの位置を指定するときは、DesktopLocationプロパティを使うと簡単。 fm.StartPosition = FormStartPosition.Manual; fm.DesktopLocation = new System.Drawing.Point(posLeft, posTop); デスクトップの絶対位置座標を指定することになる。

エクセルの製品とバージョン番号との対応

エクセルを操作するソフトを作るときに参照するDLLファイルのバージョンを気にする必要があるので、エクセルの製品とバージョン番号との対応表をまとめておく。

SQLServerのバージョンとエディションを調べる手順

イメージ
インストールされているSQLServerのバージョンとエディションを調べる手順。 (1)SQLServerのインストールセンターを起動する。 (2)ツールの「インストール済みSQLServer機能の検出レポート」のリンクをクリックする。 (3)少し待つと結果が表示される。

Windows7のVirtualPCについてのメモ

イメージ
その1 Windows7の仮想PCで日時を変更しても、数秒後には本体のパソコンの日付に同期してしまう。 日付を変更してテストしたいときは、本体のパソコンの日付を変更するとよい。勝手に仮想PCの日時も変わっている。 その2 VirtualPCでWindows7のHome Premiumをセットアップしたら、統合機能が有効にできなかった。Professionalでないとできないの? 仕方ないので新しい仮想PCを作ろうとしたときに、HOMEをPROにアップグレードすればいいのでは!と思いついた。ソフトを入れ直すのは大変だし、アップグレードをまずは試してみる。 PROにはアップグレードできたけど、統合機能は有効にできなかった。だめだなこれは。カナ漢字変換もできないし、この仮想PCはいろいろと駄目だ。 その3 仮想PCを作ったらWindowsUpdate。いつものことながらに時間がかかる。

アセンブリ '<アセンブリ>' は、必要条件として設定されるためには、厳密に署名されていなければなりません。

ビルドしていると「アセンブリ '<アセンブリ>' は、必要条件として設定されるためには、厳密に署名されていなければなりません。」というエラーが表示されることがある。 プロジェクトのセキュリティで「ClickOnceセキュリティ設定を有効にしてください」に知らないうちにチェックが入っていたら、これを外すとエラーは出なくなる。 2日も悩まされた。

SQLServer2008をアップグレードするときにハマった

イメージ
SQLServerのExpress版をStandard版にアップグレードするときにはまったので、手順をメモします。 ハマる条件 (1)SQLServerが32ビット (2)Windowsは64ビット 手順 (1)SQLServerStandardのセットアップCDからセットアップを起動する (2)SQLServerインストールセンターが現れる (3)左側の「オプション」をクリック、右側で「x86」を選ぶ。 (4)左側の「メンテナンス」をクリック、「エディションのアップグレード」をクリックする。 あとはウイザードに従って進めていく。 (3)の手順を忘れると、ウイザードは正常に終了するのだけど、アップグレードはされていないという困った状況が発生するので注意。

処理中にマウスを待機中にする手順

処理中にマウスを待機状態にする手順。                 Cursor.Current = Cursors.WaitCursor;       (時間のかかる処理)                 Cursor.Current = Cursors.Default; try/catch で囲っているなら、 catch のところでデフォルトに戻すことを忘れずに。

チャートコントロールのサンプル集

イメージ
マイクロソフトのサイトからダウンロードしたチャートコントロールのサンプル集。いろいろできるのね。もっと使わないといかんなあ。 * (追記)2017/6/26 久しぶりにチャートコントロールを触ることになったので、サンプル集を久しぶりにダウンロードした。そのときの作業をメモしておく。 ダウンロードしたのはここから。 Samples Environments for Microsoft Chart Controls ダウンロードしたZIPファイルを展開すると長い名前のフォルダができる。以下の順にフォルダを開いていく。 Samples Environments for Microsoft Chart Controls  Windows Forms Samples Environment for Microsoft Chart Controls   C# そこにソリューションファイルがあるので、VisualStudioで開いてビルドする。 同じフォルダに「WinFormsChartSamples.exe」という実行ファイルができる。これがサンプル集。 ただし、実行するとエラーがでるので、下記の2つのファイルを、親フォルダにコピーしておく。 cs_langDef.xml vbnet_langDef.xml このサンプル集は、プロパティの使い方なども説明してくれるので、大変ありがたい。グラフでズームができるなんて知らなかったよ。 *

VisualBasic6.0のサポートについて

そろそろVB6ともおさらばしないと。 Windows Vista、Windows Server 2008、Windows 7、および Windows 8 に対する Visual Basic 6.0 のサポートに関する声明

VisualStudio2013のセットアップでエラー

イメージ
vs2013をセットアップしたらエラーが出た。なんだろうこれ? アンインストールして、もう一度セットアップしたらうまくいった。変な状態で使うのは使うのは嫌なので、エラーが解消してよかった。

ソフトにリボンインターフェースを追加する方法

アプリケーションにリボンを付けたい場合の試行錯誤をメモ。 WinFormでは作れない。 ConponentOneがWinForm用のリボン部品を提供しているがもちろん有償。 WPFでは作れるが、かなり面倒。 .NET framework4.5 だとリボンコントロールが提供されているので、VisualStudioから使える。ただしツールボックスには表示されないので、自分で選択して追加する。リボン関係の分品はたくさんあるので、どれが必要なのかわからない。 リボン、タブ、グループという順に部品を重ねていく。 WPFの画面編集はすこぶる使いにくい。 リボンのタブを選んでも選択されない。グループの上にボタンを載せても姿が見えない。 WPFに慣れていないせいもある。 ということで、アプリケーションにリボンを追加するのは簡単にはいかない模様。 ちなみに、エクセルアドインプロジェクトならリボンは簡単に作れます。

VisualStudio2013のイメージライブラリ

イメージ
vs2013のイメージライブラリは下記のページからダウンロードできる。 探すの大変だったのでメモ。 Visual Studio Image Library アイコンとか山のようにあります。 VisualStudioのアイコン集をダウンロードしたら、見事にフラットデザインだった。

VisualStudio2013でセットアッププロジェクトを使うための手順

イメージ
vs2012で消えたセットアッププロジェクトがvs2013で使えるようになったので、そのための手順。 vs2013のツールメニュー→拡張機能と更新プログラムを選ぶ VisualStudioギャラリーからツール→セットアップと展開を選ぶと多分1番最初に「Microsoft Visual Studio Installer Projects」があるので(下図)、インストールする。 しかし、メニューは全部英語なのだった。 

bcpコマンドのパス

SQLServerでは数万行のCSVファイルをinsert文で取り込むと時間がかかってし方がない、高速化したいというときに、bcpというコマンドを使うことがある。 bcpコマンドは、SQLServerのバージョンによって動作が違うところもあって、パソコンに2つのバージョンのSQLServerがセットアップされていると、エラーが起きたりして困る。 そこで、bcpコマンドのパスを探してフルパスで指定して実行するという手段で解決したりする。

テーブルの差異をチェックする

SQLServerでテーブルの差異をチェックしたいときはexceptを使うと便利。2018/1/16追記。

SQLServerでデータベースをコピーする手順

インスタンス内でデータベースをコピーするときは、SQLServer Management Studioで以下の操作を実行する。 データベースをバックアップする。 左のツリーで「データベース」を選んで右クリック→「データベースの復元」を選ぶ。 バックアップしたファイルを復元もとに指定、復元先に新しいデータベース名を指定する。 注意としては、既存のデータベースに復元しようとするとエラーになる。コピー先のデータベースは復元時に新規作成することになる。 #google+に投稿していたのだが検索できないのでブログに移した。