ASP.NET MVC 01_環境の作成

ASP.NET MVC 5 実践プログラミングを買いました。

プログラミングMicrosoft ASP.NET MVC 第3版ASP.NET MVC 5 対応版 (マイクロソフト公式解説書)も買いました。

この本を教科書にして手を動かしながら少しずつ勉強していこうと思います。

環境作成

まずは環境作成からです。
無償のVisual Studio Community Edition 2015を利用しようと思います。

下記のサイトからWebインストーラー「Microsoft Web Platform Installer 5.0」をダウンロードします。

ダウンロードした「wpilauncher.exe」を実行し、右上の検索ボックスに「2015」と入力して検索を実行します。

検索結果の一覧から「Visual Studio Community Edition 2015」を追加し、インストールを開始します。
インストールはかなりの時間がかかりました。

次にVisualStudio2015を日本語化するために以下のサイトから「Microsoft Visual Studio 2015 Language Pack」をダウンロードします。
https://www.microsoft.com/ja-jp/download/details.aspx?id=48157
ダウンロードした「vs_langpack.exe」を実行しインストールします。
こちらも結構な時間がかかりました。

以上で環境作成は終了です。

ASP.NET MVC 始めました。

今年初めに転職してもうすぐ1年です。

職場の99%がCOBOL出身者で、.NET(VB)に移行された方たちでした。
仕事は.Net2013(VB)+Oracle。Windows Form アプリ開発。

…あれ?.Netだよね?え?VB6じゃね?


そんな職場のVBあるあるですが
option strict off。
むちゃな型変換(戻り値stringなのにtrue/falseが返る)
金額計算で桁落ち発生。
onにしようと提案するも却下

すべてのメソッドはtrue、falseを返す。
しかし呼び出し元ではtrue。falseの結果は無視される

例外キャッチしてログを残すが、各開発者が気になるところだけtry~catch。
例外一元管理を提案。
それでも例外はキャッチされ、再スローではなく新スローされる。もしくは握りつぶされる。

クラス、継承、インターフェースがわからない
インターフェースを使ったら、皆がわからないからダメだと言われた

省略しすぎた変数名。クラス名。
省略しないメソッド名を書いたら長すぎると笑われた

変数名は接頭辞必須。
しかし値型でなければ接頭辞はすべてobjXXXX。意味ないだろソレ。

プロジェクト名やフォーム名はアルファベット3文字+数字5ケタ。
ベテランでもなければ対応表がなければ、どれが何なのかわからない。
もちろん対応表はない。

ストアド大好き
ストアドはCOBOL時代からだから、慣れてるもんね

あげたらキリがない。

もうね。
あ~残りの人生、ここで一生VBでWinフォームつくるんだ~
クソおもんないっ!ってちょっと腐ってました。

Winフォームの方は会社内で遺産があり、新しい作り方は受け付けないって感じで
ワンマン社長(開発もする)に釘さされました。

Webフォーム(VB)にはまだ参戦できそうだったので、そちらの方に力入れてたんですが
案件が少ない。
(それでも少しは影響を与えることができたかな・・・)

そんな中ASP.NET MVCで開発するぞっって話が出てきました。
私が参加できるかは微妙だけど、チャンスがあるなら手をあげれるように

ASP.NET MVC 始めました。

.NET 例外「Cannot drop database. ’データベース名’ because it is currently in use」

ASP.NET MVC5のお勉強中です。
サンプルに従って順次実行していってるのですが、

デバッグ実行して、ローカルDBからデータをViewに表示する

デバッグ停止

サーバーエクスプローラーでDBの内容を確認する。

再度デバッグ実行して、Viewを表示すると例外が発生して表示できません。

例外の内容は
Cannot drop database. ’データベース名’ because it is currently in use
データベースが使用中で削除できないとのことです。

サーバーエクスプローラーでDBの内容を確認すると
データベースに接続中になり、アイコンが緑のコンセントマークになります。

データベースを右クリックメニューから「切断」して実行すると、アイコンが×に変わります。

データベースを切断してから実行すると、例外が出ずに実行できました。

サンプルでは
DropCreateDatabaseAlwaysやDropCreateDatebaseIfModelChangesを使用してデータベースに初期データを作成しているので、
データベースに接続したままだと、データベースが削除できないヨと怒られたんですね。

Oracle ストアドの内容をファイルに出力する

Oracleのストアドの内容をバッチファイルでsqlplusで出力する方法です。

まずSQLファイルを作成します。
CドライブにCreate.sqlでファイルを作成したとします。
ストアドの出力先はCドライブのOutput.sqlとしています。
set echo off
set heading off
set termout off
set pause off
set pagesize 0
set linesize 1000
set trimspool on
set feedback off

spool C:\Output.sql

SELECT TEXT
FROM   ALL_SOURCE
WHERE  NAME = 'ストアド名'
ORDER BY TYPE, LINE;

spool off;

quit

次にバッチファイルを作成します。
CドライブにCreate.batでファイルを作成したとします。
sqlplusを使用して先ほど作成したsqlファイルを実行します。
sqlplus Oracleユーザー名/パスワード@データベース名 @C:\Create.sql

バッチを実行すると、ストアドの内容が「そのまま」出力されています。

ストアドの内容をCreate文付きで出力するのならコチラ。
set pages 0
set lines 200
set long 65535
set longc 65535
set trimspool on

spool 出力先ファイルパス

SELECT 
 DBMS_METADATA.GET_DDL(OBJ.OBJECT_TYPE, OBJ.OBJECT_NAME, OBJ.OWNER) AS SCRIPT
FROM DBA_OBJECTS OBJ
WHERE
 OBJ.OWNER ='ユーザー名'
 AND OBJ.OBJECT_TYPE ='PACKAGE'
 AND OBJ.OBJECT_NAME ='ストアド名';

spool off;

quit

ASP.NET Webフォームアプリケーションをコピーして、新しいアプリケーションを作成する際の注意

ちょっとハマったので自分用メモです。

VisualStudio2013 ASP.NET Webフォームアプリケーションであるプロジェクトを作成しました。
これをAプロジェクトとします。

次にAプロジェクトをコピーしBプロジェクトを作成しました。
アセンブリ名などを変更し、特に問題なく実行できることを確認しました。


次に
まずAプロジェクトを実行し、起動したIEを閉じます。

BプロジェクトのWeb.configを修正し起動させます。 このとき変更後のWeb.configが読み込まれず、AプロジェクトのWeb.configが読み込まれていました。
またBプロジェクトにブレークポイントを置いても、ブレークポイントで止まりませんでした。
ブレークポイントに警告「ブレークポイントは現在の設定ではヒットしません。(以下略)」と表示されていました。

各プロジェクトのプロパティでWebタグの「サーバー」の仮想ディレクトリが同じことが原因でした。

.NET(VB) いまさらだけどVBでYieldを書いてみた

C#ではVisualStudio2005(C#2.0)でyieldが登場し、
VBではVisualStudio2012(VB11)でやっとyieldが使えるようになりました。

「いつか使ってみたいなぁ」と思っていたけれど、まったく使う機会がありませんでした。
もうね「このまま一生使うこともないのかなぁ」と思ってました。
しかし、この度やっとyieldを使ってみることができました!しかもVBで!

うれしかったですね。
「yield便利~♪」より「yieldやっと使えたよ~っ泣」って。

yield便利だけど使う機会がほぼないんですよね。
特に私のような末端の底辺PGにはw
しかもジェネリックの登場で自作コレクションを作る機会自体が減ってますからね。

今回はASP.NETで自作コレクションクラスを作る必要がありyieldを使ってみました。
(少しハマった部分もありました。別記事で書きます。)

yieldの使い方はネットにごろごろあるので自分用のメモ程度に記載しておきます。

VisualStuidio2013/Fw4.0/VB
Public Class MyCollection
    Implements IEnumerable(Of String)

    Private _items As New List(Of String)

    Public Iterator Function GetEnumerator() As IEnumerator(Of String) _
    Implements IEnumerable(Of String).GetEnumerator
        For Each s As String In Me._items
            Yield s
        Next
    End Function

    Public Function GetEnumerator1() As IEnumerator _
    Implements IEnumerable.GetEnumerator
        Return GetEnumerator()
    End Function
End Class

自作コレクションクラスをForEachでクルクルまわせたり、Linqで使えるようにするためにIEnumerable(Of T)を実装させます。
IEnumerable(Of T)を実装すると、GetEnumerator()メソッドとGetEnumerator1()メソッドを実装する必要があります。

GetEnumerator1()メソッドは、もう一方のGetEnumerator()を返すように実装します。
GetEnumerator()メソッドは、Yeildを使用できるようにIteratorキーワードを付けます。
Public Iterator Function GetEnumerator() As IEnumerator(Of …
あとはコレクションの要素をクルクル回して1コづつYeildで返してあげればOKです。

.NET VisualStudioのバージョンとFrameWork、VB、C#の対応表

調べる必要があったのでメモっておきます。

Visual StudioFrameworkVBC#
Visual Studio 2015Framework 4.6 VB14C#6.0
Visual Studio 2013Framework 4.5.1VB12C#5.0
Visual Studio 2012Framework 4.5 VB11C#4.5
Visual Studio 2010Framework 4.0 VB10C#4.0
Visual Studio 2008Framework 3.5 VB9 C#3.0
Visual Studio 2005Framework 2.0 VB8 C#2.0
Visual Studio 2003Framework 1.1VB7.1 C#1.1
Visual Studio 2002Framework 1.0 VB7 C#1.0