カテゴリー「ASP.NET」の10件の記事

2010年8月18日 (水)

基礎からのASP.NETを読む(10)

今日は、基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)を読みました。

そろそろ、終盤に差しかかってきましたが、

今回は、DataSet、ストアドプロシージャ、ユーザコントロールの作成について

書かれていました。

個人的には昔関わった.NETの仕事でDataSetを使って痛い目を見た記憶が

あって、DataReaderの方がいいんじゃないのか?と思っていたのですが、

用途をしっかりと知った上で使う方法を考えるべきだと再認識しました。

それから、拡張機能をユーザコントロールとして実装すると、複数のマスタページを

作成するときなどに簡単に再利用ができるようになります。

カレンダーコントロールはデータソースとの連携はできないので、

データベースの処理は分離コードから直接データベースの処理を書かないといけない。

など、なんとなくですが、上手にデータソースと連携できるようにすると

省力化が図れそうです。

(ただ、そんなに標準のコントロールと連携させて終わり。というような仕様が

あるかな?とは思ったりしますが。。)

| | コメント (0) | トラックバック (0)

2010年8月17日 (火)

基礎からのASP.NETを読む(9)

盆をはさんで少し休んでいましたが、基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)を読みました。

今回読んだ内容は、Dataコントロールを使って、コーディングせずに
データベースの内容を参照、編集する事ができる方法が書かれていました。

一覧形式で表示するにはGridViewを利用すると便利でした。
(データソースコントロールでデータベースの内容を取得する)

また、データソースのWhere条件にDropDownListなどのコントロールの
選択値を指定することも可能で、コントロール間の連携もしっかり
できました。

編集については、データソースの詳細設定でINSERT、UPDATEおよび、DELETEステートメントの生成にチェックを入れる事で、
更新系のクエリが生成されるようになりました。
(この状態で、編集、削除を有効にするにチェックを入れると、
編集、削除のリンクが追加されます)

ただし、DateTime型のフィールドに関しては、生成されたままでは、
更新エラーになってしまったため、
DbType="Date"をDbType="DateTime"に変更する必要があります。

追加に関しては、GridViewではなく、DetailViewを利用すると
追加できるようになります。

コーディング無しで、ここまでできるとかなり開発効率が
上がりそうな気がしましたが、一般的にはどうなんでしょうか。

| | コメント (0) | トラックバック (0)

2010年8月12日 (木)

基礎からのASP.NETを読む(8)

いつの間にか、8回目になった、基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)の進捗ですが、

今日はADO.NETの概要から、VisualStudioでデータベースの定義を設定する部分を読みました。

.NETデータプロバイダにも色々あるようで、
Data Provider for SQL Server
Data Provider for OLE DB
Data Provider for ODBC
Data Provider for Oracle

があるようです。

SQLServer2005の場合は、Data Provider for SQL Serverを利用するのが適切なようです。

それから、DataReaderとDataAdapterでは、接続方法がちょっと違うようです。
DataReaderの場合は接続型で読み取り専用のストリームが提供されます。
DataAdapterの場合は非接続型でDataSetの中に一旦データをキャッシュされ、
それを編集してデータベースに反映させる事も可能なようです。

以降は、SQLServerをコマンドラインからいじったり、SQLの説明だったので、
今回は流し読みをしました。

そして、最後に、Visual StudioからSQLServerにテーブルを追加する操作を行いました。
SQLServer Management Studioでの操作とほぼ同じだったので、特に苦労をすることも無く
簡単に作れました。
そして、今まで使った事がなかった、ダイアグラムを作ってみましたが、
外部キー制約などを簡単に作る事ができたのと、E-R図みたいに視覚的に
表現されるので、データベースの設計する時これ使えばいいんじゃないのか?
とちょっと思いました。
(開発時はどうしてるんでしょうか。私はデータベースの設計はした事がないのでわかりませんが)

軽く試験データも登録した所で、Androidの会岡山支部長に呼ばれたので中断。

| | コメント (0) | トラックバック (0)

2010年8月11日 (水)

基礎からのASP.NETを読む(7)

今日は、基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)のchapter14 アクセスログの管理〜
chapter17のデプロイの所まで読みました。

アクセスログを出力させる。というテーマでどういう風にコードを書けば良いかが
書かれていました。手っ取り早いのが、
Global.asaxのApplication_BeginRequestで、ログを出力させると
良いようです。しかし、この方法だと、ログのフォーマットが変わる等した場合に
毎回ビルドが必要になってしまいます。

そこで、HttpModuleを使って、外部のライブラリから実行させる方法をとると、
web.configを編集するだけでライブラリを切り替えたりする事も
可能になるので柔軟性が出るようです。
(Express Editionだと別プロジェクトが作れない関係で実行確認はできませんでした。)

そして、キャッシュを使った、パフォーマンスの改善方法について
触れられていました。

出力キャッシュを使うと、出力内容に変化が無い場合は、キャッシュに蓄えられたデータを
返す事で、毎回Pageオブジェクトが再生成される回数を減らし、パフォーマンスをあげる事が
できます。
しかし、選択肢が変わる度に表示が変わるようなページには使えそうにないなと
感じました。

出力キャッシュの他に、データキャッシュという機能もあり、こちらは
生成した任意のデータをキャッシュする機能だそうです。
例えば、Webページの選択肢などをファイルから読み取って表示させる場合など、
毎回ファイルを読み取るよりはサーバのキャッシュに溜まっているデータを出す方が
効率が良くなるという作戦。

これに関しては、色々な場面で使えそうな気がしています。
(マスタデータみたいにほとんど変わらない物とか)

最後は、デプロイの話。

これに付いてもExpressEditionなのと、IISをインストールしていなかったので、
さっと読んで、素通りしました。
これについては、またどこかで。

| | コメント (0) | トラックバック (0)

2010年8月10日 (火)

基礎からのASP.NETを読む(6)

がんばって読み進めている、基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)ですが、

今日は、前回の練習問題の解答から、画面遷移についての内容でした。

今回はちょっとハマってしまいましたが、何とか、@kiyokuraさんに説明を
頂きながら解決しました。

Page_LoadでCalendar.SelectedDateにCookieの値をセットするように
して、初期値を表示させ、PostBackUrlで指定したURLの画面で、
Page.PreviosPageで前画面のコントロールから値を取得しようと
していたのですが、PreviosPageでPage_Loadが実行されるため、
初期値が毎回セットされる現象に気がつくのに時間がかかってしまいました。

ちゃんと、IsPostBackプロパティをチェックして、PostBackの場合は
初期値セットをしないようにしないといけないということでした。

続いて、画面遷移の方ですが、
Server.TransferとResponse.Redirectの違いについての話題から始まりました。
(Javaで言う所のforwardとredirectの違いと言って伝わるかどうか)

Server.Transferではforwardですので、サーバ内部でのページ転送となります。
よって、前ページのコントロールの値が取得可能ですが、
Redirectの場合は一度、クライアントにレスポンスを返すので、前ページの値が
取得できないという違いがあります。
(見た目ではURLが変化する)

Web.configのappSettingsセクションにURLを記述しておき、
プログラムから参照しておけば、遷移先のページを切り替える事が
可能になります。
ただし、appSettingsには何でも登録できてしまうため、
何でも登録しておくとごちゃごちゃするということが発生します。

カスタムセクションの話題も書いてあるのですが、
Visual Web Developer 2005 Express Editionでは実現できませんでした。

そして、Session、Cookieによる状態管理について。
SessionはSessionIDで管理されていて、ブラウザごとに一意に割り当てられる。
サーバ上に保持されるため、ちょっと大きいデータも保持できるようです。
ただし、サーバの電源が落ちるとか、サーバプロセスが終了すると
Sessionの内容も消えてしまうため、情報によっては、Cookieに保存させて、
サーバの再起動で消失しないような設計をしないといけない。
それから、任意の時点でSessionもクリアするようにしないと、
サーバリソースを圧迫することにもなる。

ただし、Cookieも有効期限が来たり、ブラウザを終了させたり、ユーザがクリアしたり
すると、結局なくなってしまうので、消えてはいけない情報は別の場所に
保存するなどした方が良いようです。

次回は、アクセスログ管理から続いて読みます。

| | コメント (0) | トラックバック (0)

基礎からのASP.NETを読む(5)

前回の続きで、基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)を読んでいます。

今回は、「Webサーバーコントロールの基礎」ということで、ToDOアイテム登録プログラムについて
考えてみるという内容でした。

Windows Formを作るように、GUIでサーバコントロールをレイアウトしていくのですが、
コントロール自体に機能がたくさんあり、非常に便利だと感じました。
(HTMLとJavaScriptで記述するとかなりの負荷がかかりますが、
ASP.NETだと貼り付けるだけで終わりです。)

入力のバリデーションを標準で行うようになっているため、TextBoxにHTMLのタグを打ち込むと
例外がスローされるようになっています。
それを回避するために、(エンコード処理をして入力を受け付けるために)
PageディレクティブにてValidateRequest = "false"を設定し、
System.Web.HttpUtility.HtmlEncode(txtBox.Text)で、エンコード処理を行うようです。

そうすると、タグがエンコードされた状態で表示可能になります。

それから、入力チェックを行う方法として、
Validatorコントロールが用意されていました。

RequiredFieldValidatorは必須入力チェック
CompareValidatorは入力の比較チェック

ValidationSummaryを使うと、レイアウトに存在している検証コントロールの
エラーメッセージを集約する事ができ、便利な機能だと思いました。

あとは、Calendarコントロールなんかも便利だと思いましたが、
Page_Load時にSelectedDateを設定してると、
Postback先のページで値をとると、変更後の値が取れないという
現象が発生してますが、この現象はゆっくり調べてみようと思います。

| | コメント (0) | トラックバック (0)

2010年8月 9日 (月)

基礎からのASP.NETを読む(4)

先週末に読んだ基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)の整理をしていなかったので、書き残しておきます。

先週読んだ所は、Webページでの値の保持方法と、複数ページでの遷移する時の
値の受け渡しについてでした。

ASP.NET2では、
・Cookie
・StateBag
・Session

の3つを利用して値を保持したり、ページ間で値の受け渡しをしたりするようです。

Cookieは、クライアントのメモリorディスクに保存させることで、値を保持する方法です。
(有効期限を指定(Expiresプロパティに値をセット)するとディスクに書き込む)

Cookieを利用するとブラウザ終了後に破棄されます。(メモリ保存のみの場合など)
利用者がCookieを拒否する事も可能
そもそもCookieが利用できないブラウザが存在したりする。
最大4kバイトの情報を保持できるらしい。

一時的なセット
Response.Cookies("key1").Item("key2") = "hoge"

復元可能なセット
Response.Cookies("key1").Item("key2") = "hoge"
Response.Cookies("key1").Expire = "未来の日付"

値の取り出し
Request.Cookies("key1").Item("key2")

StateBagは、ViewStateプロパティを利用してやり取りする。
(ViewStateはブラウザのhiddenに値を保持させている。
Base64エンコードしているので、メモ帳で見ても値は判別できない。)

値のセット
ViewState.Item("key1") = "hoge"

値の取り出し
ViewState.Item("key1")を型変換

Sessionは、サーバで保持する方法で、セッションIDで、クライアントを判別し、
アプリケーション内でデータを共有できる。
ただし、サーバのリソースを消費する。

値のセット
Session.Item("key1") = "hoge"
Session("key1") = "hoge"

値の取り出し
Session("key1")を型変換

注意点
ViewStateを利用した時は、更新ボタンを押した時と、Submitした時で挙動が違う。
Cookie、Sessionは更新ボタンでも、クライアント、サーバで保持している値を利用するので変化するが、
ViewStateについては、更新ボタンだと表示前のリクエストで実行されるため、値が変化しない。

| | コメント (0) | トラックバック (0)

2010年8月 6日 (金)

基礎からのASP.NETを読む(3)

昨日も続いて、基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)を読みました。

今日は、ASP.NETのディレクトリ構造から、aspxファイルの構成、Pageオブジェクトの
プロパティについて、書かれていました。

以下、ポイント

ASP.NETのディレクトリには、以下のディレクトリがあるようです。


  • Bin(参照設定されたクラスライブラリのDLLがコピーされる)

  • App_code(Webアプリ内のクラスファイル)

  • App_GlobalResources(Webアプリ全体共通の.resx)

  • App_LocalResources(ページ固有の.resx)

  • App_WebResources(Webサービスを参照設定したときの.wsdl)

  • App_Data(WebPartsを利用した時のパーソナライズデータ)

  • App_Browsers(ブラウザの機能に関する情報)

  • Theme(UIの情報)

ファイルはHTML、JPEG、JSファイルと固有の物がある。


  • .NET Framework対応の言語で記述されたソースコード

  • ユーザとの対話的な処理のためのHTMLコードファイル

  • Webアプリの初期設定データや基本動作を定義するための構成ファイル

  • XMLドキュメントやスキーマファイル

aspxの構成要素には以下の物がある。
ディレクティブ
プログラムコード(コードビハインドの場合は.vbに分離される)
ページレイアウト

Shared変数はポストバックの影響を受けない。
ただし、ブラウザインスタンス毎の共有には使えない(全てで共有される)

Pageオブジェクトの主要なプロパティ
Request(HTTPリクエストで受け取ったデータ全般に対するアクセス)
Response(HTTPレスポンスへのデータ格納)
Server(HTTPリクエストを処理するための機能を提供)
Application(アプリケーション内でグローバルな状態管理)
Session(ユーザ毎のセッション内で閉じた状態管理)

と、本日はAndroidアプリの開発に1日費やしたため、明日から再開します。

| | コメント (0) | トラックバック (0)

2010年8月 4日 (水)

基礎からのASP.NETを読む(2)

一昨日から読み始めた基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)なんですが、
昨日は、ASP.NETの仕組みについて書かれていました。

ASP.NETは、
リクエスト情報の取得、サーバ側Webアプリケーションの管理、パフォーマンス向上
レスポンス用のインターフェイスの提供、ブラウザ毎に最適化したHTMLを動的に生成。
などの機能を提供してくれるものだそうです。

以下、ポイント整理

基本的には、.aspxファイルにHTMLとサーバで処理するタグを記述させる、PHP、JSPなどと
同じような構成だということです。
実際には、GUI部分だけを.aspxに記述して制御コードは.vb or .csに記述する
コードビハインドさせるようです。
(こうする事で可読性が上がる。ということです)

ASP.NETのアプリケーションの呼び出しは、


  1. ブラウザからのリクエスト

  2. IISでの受付

  3. ISAPIフィルタ(Aspnet_isapi.dll)にディスパッチ

  4. HttpApplicationオブジェクトの起動

  5. HttpApplicationオブジェクトがHTTPModelを前処理として実行

  6. Pageオブジェクトを起動

  7. Pageオブジェクトを実行(.aspxはこの部分の処理を記述する)

  8. 結果を返す。

.NET対応言語はすべてアセンブリ(IL)にコンパイルされる。
実行時にJITコンパイラでネイティブにコンパイルされて実行されるそうです。
(この機構により、.NET対応言語ごとのパフォーマンスの差が出なくなるメリットが出てくる)

CGIと比べて、ASP.NETはスレッドで動作するため、オーバーヘッドが少ないようです。
(どちらも、処理後はインスタンスが消滅する。CGIの場合はプロセス終了)

イベントドリブンモデルを採用しているため、ユーザの操作をサーバでハンドリング可能に
なっている。(JavaScriptで互換性を考えてコードを書いていた部分をサーバ側で処理できる。)
という事から、互換性の考慮が減るということになります。
しかし、全てのイベントをサーバで処理させようとするとサーバの負荷が高くなるので、
結局、ボタンクリックとか項目選択変更などのイベントに限られている。

ポストバックという考え方が導入されている。
(Webブラウザとサーバ間のイベントのやり取りを効率的に処理する仕組み。
Ajaxと何か違うんだろうか?)
ポストバックには状態管理の簡易機能が提供されている。→これがVIEWSTATEというやつか?)

上記に加えて、昨日やっとHelloWorldを実行しました。

| | コメント (0) | トラックバック (0)

2010年8月 3日 (火)

基礎からのASP.NETを読む(1)

昨日(8/2)から基礎からのASP.NET SE必修! (SE必修!プログラマの種シリーズ)
読み始めました。

今更、ASP.NET2なのか?という事は、色々都合があって
これじゃないといけないのです。

今回はChapter1 Webアプリケーション概要を読みました。

まだASP.NETについての話題は出てこなかったのですが、
改めて、HTTPについての知識を整理する事ができました。

ポイントとしては、
・1回の往復(リクエスト、レスポンス)で完結する。
・複数回の往復で継続的な情報は保持されない。
・リクエストは必ずブラウザから始まる。
・GETはQueryStringも一緒にブックマークできて良いが、データ容量の制限がある。
・POSTはGETよりもデータサイズの上限がゆるいため大きいデータを送る事ができる。
・Webアプリケーションを作るときは、Webブラウザの種類も考慮した設計、実装が必要。
・企業内利用などの場合は、割り切り仕様にする場合もある。
 (利用するブラウザを限定することができるから?)

| | コメント (0) | トラックバック (0)