Kobarin's Development Blog

C#やASP.NETなどについての記録です。

SQLserverの.mdfファイルを別マシンでattachできない(Error:5123)の対応

症状

テスト環境をつくろうと、サーバーの.mdfファイルをローカルPCに移動してSSMSからattachしようとしたところ、Error5123により出来ない問題が起こりました。

f:id:fskkoba:20150729163503j:plain

情報源

エラー番号「5123」をもとに検索したところ、以下のスレッドが見つかりました。

Error: 5123 CREATE FILE encountered operating system error 5A(Access denied.)

どうやらアクセス権の問題らしく、ここでは「everyoneにfull control与えればOK」とある。

解決

そこで自PCで確認すると、やはりアクセス権が親フォルダから継承されていないことが分かりました。やはり別マシンから移行した際はよく確認しないといけませんね。
アクセス権を親から継承して再度attachしたところ、無事にできました。

SQL Serverの別名が効かなくなった際の対応

SQL Serverにエイリアス(別名)で接続する - Kobarin's Development Blog
で昔投稿した別名設定に関して、先日突如機能しなくなったため、Technetフォーラムにて
別名で接続できない
のスレッドでご相談させて頂きました。以下、結果のみまとめます。

経緯

Vistual Studio 2015のインストール、及び同時期にWindows UpdateにてSQL Server 2014 SP1を適用したところ、SQL Serverインスタンスへの別名接続できなくなった。

試した事/確認したこと

  • 「サービス」で「SQL Server Browser」の再起動 → 改善されず
  • 別名でなくインスタンス名で接続 → 接続成功
  • SQL Server Configuration Manger(構成マネージャー)にて別名の確認 → 以前通り

解決

  1. SQL Server Configuration Manger(構成マネージャー)を開く
  2. SQL Serverのネットワーク構成」 >「(instance name)のプロトコル」を開く
  3. TCP/IP」が”無効”になっていたので、これを”有効”に変更

結論

VS2015のインストールが原因なのか、SQL2014のSP1が原因なのか未だにわかりませんが、とりあえず上記の通り解決しました。

「地図で見る統計」と「地図による少地域分析」

政府統計APIの公開など、政府による保有データの活用促進が活発になっている昨今ですが、GISも以前よりかなり洗練されたものが出来ている事を最近知りました。もっと前からあったのかもしれませんが、気づきませんでした。

内容としては、ブラウザで閲覧可能で、地図上に統計情報(人口や世帯数など)を表示できるといったものです。機能は限られているものの、従来は民間の有料サービスでしか利用できなかったため、こうした動きは歓迎です。

ただ、ちょっと分かりにくいことに、同種のサービスが2種類あり、最初少し戸惑いました。どちらもe-Statによる運営らしいですが、ここで違いを書いておきたいと思います。

まず政府統計の総合窓口 GL01010101をご覧ください。その中で、

  • 「地図で見る統計(統計GIS)」
  • 「地図による少地域分析(jSTATMAP)」

の2つのリンクがあります(2015年5月現在、「地図や図表で見る」枠内にあります)。
ザックリですが、共通点と相違点について列挙してみました。

共通機能

  1. ブラウザのみで閲覧可能
  2. 統計データとしては、国勢調査だけでなく経済センサス等もある(全く同じラインナップではない)
  3. 少地域単位で人口や世帯数などを色分け表示できる。少地域とは、国勢調査において最も細かい単位の住所区分で、いわゆる町丁目と呼ばれるものと思って下さい。
  4. 色分けしたエリアにラベルを表示できる(エリア名、統計値、など)
  5. 指定範囲の面積や距離の計測可能

地図で見る統計

  1. 誰でも使用可能
  2. 少地域のみならず、市区町村単位、県単位による表示も可能

地図による少地域分析

  1. 「お試し版」と「正式版」があり、「お試し版」は誰でも利用可能だが、「正式版」は審査があるらしい(数分で承認メールが届いたけど)
  2. 県や市による集計は出来ないが、少地域に加えてメッシュ単位の集計が可能。国勢調査は1km・500m・250m。経済センサスは1km・500m。
  3. 円や四角形、ポリゴン(多角形)を設定して集計できる。ただし基になる統計の数値はメッシュなので、これを按分する事で計算しているようです(わからない方は、”面積按分”で検索)
  4. しかも円やポリゴンを「My エリア」みたいに保存できる(!)
  5. 集計結果を表形式で出力可能
  6. プロットを地図上にポイントし、属性(金額とか身長とか…)を設定可能。更にこの属性値の集計もできるらしい(当方で試したところ、「プロットの場合違う指標を選択しろ」的なメッセージが現れて出来ませんでしたが)

以上、つらつら書いてみましたが、簡単に分けると下のような使い分けなのかな、と思います。

  • 「地図で見る統計」は、「この辺りの人口ってどんな感じ?」的な、小難しい事はいいからとにかくササッと使うような用途
  • 「少地域分析」は、かなりビジネスライクにマーケティング分析等に使う用途

といったところでしょうか。
もちろん本格的な調査であるなら民間のサービスを使わないとなりませんが、簡単な調査やGIS初体験的な用途としては十分だと思います。
今日使ったばかりなので、まだ知らない事や勘違いしている部分も多いと思います。
何か分かり次第、書いていきたいと思います。

Regular Expression Checker作りました

正規表現のチェックを行うためのツールRegular Expression Checker」を作りました。

当初は確認だけの目的で作りましたが、置換えもできれば便利だと思いつき、置換え機能もつけました。

利用用途は色々です。

  • サンプルにもありますが、CSVの置換え
  • ある物語をコピペして、「私」と「君」が出現する回数を比べる(だから?)
  • 首相演説をコピペして、特定用語の出現数を調べる(「消費税」「教育」など)
  • 金額箇所の桁あわせ(「1,234千円」→「1,234,000円」)

よいサンプルが思いつきませんでした。また思いつき次第追記します。

HTTP Error 500.19 - error code:0x8007000d の解決方法

前回記事と同様、WindowsPCでIIS7.5を初起動させようとして起こる、よくあるらしい現象。

StackOverFlowの書き込みによれば、前回同様、基本的にWeb Platform Installerに起因する現象のようです。

エラーメッセージにはApplicationHost.configが原因みたいな事が書かれていますが、実際にはApplicationHost.configを編集する必要はなく、Web Platform Installerを使って「url rewrite」をインストールすることで解決できました。
私なりに原因と解決方法をまとめると、以下の通りです。

原因

Web Platform Installerを使ってASP.NETをインストールすると発生する

解決方法

Web Platform Installerを使ってurl rewriteをインストールする

HTTP Error 500.21 - error code:0x8007000d の解決方法

ローカル環境に新たにIISをインストールして実行したところ、表題の通りのエラーが発生し、解決できたのでメモ。

環境

症状

サイト全体において表題のエラーが発生。

HTTP Error 500.21
Error Code 0x8007000d
Message ASP.NETがインストールされていないか、完全にインストールされていません(再現できなかったので覚えているメッセージです。少し違うと思います)

原因

エラーメッセージは「ASP.NETがインストールされていない」旨の内容ですが、正確にはIIS側にASP.NETを登録(?)するプロセスがされていないことが原因のようです。Web Platform Installerを使って.net frameworkをインストールするとこの処理がされないような情報も以前見た気がしますが、定かではありません。

解決方法

HTTP Error 500.21 when trying to host an ASP.NET web app with IIS 7 のWinAnimesh氏のReplyの通りですが、詳しく手順を示します。

  1. コマンドプロンプトを管理者権限で実行
  2. 「C:\Windows\Microsoft.NET\Framework64\v4.0.30319」に移動
  3. 「aspnet_regiis -i」を実行
  4. 数十秒後、処理が完了します

LayoutTemplate内にコードブロック

LayoutTemplate内にコードブロックは配置できない

ListViewのLayoutTemplate内にコードブロックが配置できない事、および代替策をメモします。

例えば以下のように、何らかの一覧をulでバインドし、上部に件数を示したいケースを想定します(該当件数の箇所だけListView外に置けばいいだろう、という突っ込みはナシです)。

<asp:ListView id="lv" ...>
  <LayoutTemplate>
    該当件数: <%=_listCount %>
    <ul>
    <asp:PlaceHolder ID="itemPlaceholder ... />
    </ul>
  </LayoutTemplate>
  <ItemTemplate>
    <li><%# Eval("Name") %></li>
  </ItemTemplate>
</asp:ListView>

コードビハインドは以下の通り。

protected _listCount = 0;

protected Page_Load(...) {
  MyCompany mycom = new MyCompany();
  List<Employee> employees = mycom.GetEmployee();
  _listCount = employees.Count;
  lv.DataSource = employees;
  lv.DataBind();
}

これを実行すると、以下の様なエラーになります。

コントロールにコード ブロック (<% ... %>) が含まれているため、コントロールのコレクションを変更できません。

どうやらLayoutTemplate内でコードブロックは使えない事がわかります。

<%# ~ ->にすれば…

次に、「=」を「#」に変えてみました(以下、LayoutTemplate部のみ抜粋)。データバインドをしているので、何となくイケそうな気がしますが…

  <LayoutTemplate>
    該当件数: <%# _listCount %>
    <ul>
    <asp:PlaceHolder ID="itemPlaceholder ... />
    </ul>
  </LayoutTemplate>

結果は、エラーこそ表示されないものの、件数の部分が空欄になってしまいます。

該当件数: ←何も表示されない?!
・田中
・鈴木
・山田

以上の現象から、このListViewの挙動に関して、2つの原因が考えられます。

  1. ListViewのデータバインドはあくまでItemTemplateやGroupTemplateに対してのみであり、LayoutTemplate部は対象外
  2. コードビハインドの実行よりも、LayoutTemplate部のデータバインドが先に実行されてしまっている

ListView_LayoutCreatedイベントで解決

どちらが正しいか分かりませんが、今回もStackOverFlowの過去の書き込みで解決しました。

asp.net - Get public string in codebehind into LayoutTemplate of ListView - Stack Overflow

の中でReplyされている、以下の箇所です。

protected void lv_LayoutCreated(Object sender, EventArgs e)
{
  lv.Controls[0].DataBind();
}

どうやらControls[0]がLayoutTemplateを示すらしく、これは手動でバインドしてやらなると良いようです。
そもそもLayoutTemplateがバインドを自ら行わないから強制的にバインドさせてやる必要があるのか、それともバインドがコードビハインドより先に行われてしまう為に後から再度実行させてやる必要があるのか判然としませんが、とりあえず解決策でした。