1 名前:nobodyさん mailto:sage [2009/01/23(金) 09:46:51 ID:???] ●過去ログ Part1 - 【質問】 ASP.NETスレ 【議論】 pc5.2ch.net/php/kako/1040/10406/1040698263.html 【質問】ASP.NETスレ Part2【議論】 pc8.2ch.net/test/read.cgi/php/1111480331/ 【質問】ASP.NETスレ Part3【議論】 pc11.2ch.net/test/read.cgi/php/1160355849/ 【質問】ASP.NETスレ Part4【議論】 pc11.2ch.net/test/read.cgi/php/1184683786/ (dat落ち?) あんまり需要ないのかもしれませんが。。。
594 名前:nobodyさん mailto:sage [2009/07/15(水) 05:36:31 ID:???] CodeBehindならWEBアプリな予感 だったらビルドしたらbinディレクトリにあるはずだが WEBサイトならビルドしてもDLLは(見えるところには)作成されない プリコンパイルってVSからできたっけ? というか、参照してるDLLってなんのこと言ってるんだ? そのプロジェクト以外のDLLをBinに入れて参照してるなら、 そんなもんはそのプロジェクトいくらビルドしても変わるわけないぞ
595 名前:nobodyさん mailto:sage [2009/07/15(水) 05:56:10 ID:???] >>594 IDEからプリコンパイルできると書いてあるね msdn.microsoft.com/ja-jp/library/bb398860.aspx Webサイトでもコードビハインドだし、 「プリ」ってわざわざ付けるということは、webサイトなんじゃないかと思うんだけど。
596 名前:nobodyさん mailto:sage [2009/07/15(水) 11:45:02 ID:???] エスパー解答 実はプリコンパイルは関係なくて、 >CodeBehindに指定されている.csの内容を修正してもそれが反映されません。 >(aspxの内容を修正した場合は反映されています) のあたりを詳しく聞く必要があるとみた! .csの内容を修正しても反映されないって、例えば画面の初期化処理だとか、 ポストバック時の処理を変えたりしてみても以前のロジックが走る、 ってことかな? .csを削除してみるだとか、新しいページ追加して確認してみるとかはどうでしょう? プリコンパイルとかWebサイトとかの話はよく分からないので、分かる方お願いします。
597 名前:590 mailto:sage [2009/07/15(水) 11:55:15 ID:???] >>593-595 失礼、「Webサイト」でしたね。が・・・。 >WEBサイトならビルドしてもDLLは(見えるところには)作成されない あれ? もらってきたソース一式に、\binディレクトリがありますけど・・・? えっと、binにアプリケーション名.dllを放り込むと、VSの方で勝手にそのdllへの参照設定をします。 その参照設定を外すとdllが削除され、「型 '(アプリケーション名).Global'が読み込めませんでした」ってコンパイルすら通らなくなります。 (当然、「デバッグ」→「デバッグ開始」でも動きません) それで、「ああ、ビルドしてdllを作り直せば、.csへの修正が反映されるのね」と思ったのですが、 「ビルド」→「Webサイトのビルド」ではDLLが作られない/更新されない・・・おや? というところで詰まっているのです。 うーん・・・別に、開発してるときはプリコンパイルなんてしてくれないくていいのになぁ。
598 名前:590 mailto:sage [2009/07/15(水) 11:57:39 ID:???] >>596 おっと、すれ違い失礼。ええ、問題になっているところはソコですね。 ただ、>>597 のような考えで「プリコンパイルされたDLLが更新されないのが問題だよね?」と思ったのですよ。 ちょっとやってみましょう>新しいページを追加
599 名前:590 mailto:sage [2009/07/15(水) 12:23:54 ID:???] >>598 ダメですね。「型'アプリケーション名.hogehoge'を読み込めません」となります。 .csを無視してDLLを見に行ってるような感じです。
600 名前:590 mailto:sage [2009/07/15(水) 19:32:14 ID:???] お騒がせしました。 結局、.net 2.0を明示的に指定して最初からソリューションを作り直し、そこにソースをコピーして再ビルドをかけました。 何が悪かったんだろう・・・。 ※ツリー部にドラッグ&ドロップでコピー可能、しかも関連ファイルまで根こそぎ持っていくのにはちょっと感心しました>VS2008 とりあえず.csの修正は反映されるようになりましたが、やはりリビルドはしないとダメですね。
601 名前:nobodyさん mailto:sage [2009/07/15(水) 19:37:54 ID:???] >>600 ソースファイルのタイムスタンプがおかしくなってるとか、マシンの時刻がおかしくなっているとか プロジェクトの何かのファイルのタイムスタンプがおかしくなっているとか…。
602 名前:nobodyさん mailto:sage [2009/07/15(水) 19:55:28 ID:???] たぶん、webアプリケーションと間違えてないか? それか一つのソリューションに、webサイトプロジェクトと、他のプロジェクトがあって、 webサイトプロジェクトから、他のプロジェクトへの参照設定がされてる。 dllは、他のプロジェクトで作成したクラスのdllだからASP.NETの.csを変更してビルドしても 何の変化もないので不思議がってる。 こんなところだろ
603 名前:nobodyさん mailto:sage [2009/07/16(木) 01:59:14 ID:???] 現在Visual Studio 2008(VB.net)を使用しMasterPageの中に <div></div>ブロックで囲んだGridViewを配置し、 ヘッダー行を固定しようと、.Freezingのお決まりのCSSを書き GrdiViewHeaderのCSSにそのFeeezingのCSSを指定したところ、 ヘッダー行は正常に固定する事が出来たのですが、 <div>ブロックで正常に width:450pxと指定しているにも関わらずGridViewのヘッダー行(だけ)が その<div>ブロックの幅を右横に突き抜けて表示されてしまいます。 一体何が原因なのでしょうか? ※IE7 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 指名 | 年齢 | 趣味 | 経験年数 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 15 || ↑ヘッダー部分だけが突き抜けてしまう。(ここで趣味・経験年数) B 15 || C 15 || 〜〜〜〜〜〜〜〜〜 〜〜〜〜〜〜〜〜〜|
604 名前:nobodyさん mailto:sage [2009/07/16(木) 03:01:51 ID:???] スタイルシートはdivで指定しても、その内側のタグのスタイルの指定で 表現してくれないことがあるから、そのヘッダー行に直接スタイルを適用してみたら? というか、そういう時は、生成されたhtmlのソースをローカルなどにコピペしてブラウザで表示させるなどして、 関係ないhtmlタグを次々と消していって、目的とするタグだけで確認したほうがいいよ。 まったく関係無いと思われるスタイルが影響している場合があるから。 その目的とする表示を構成しているタグだけを残して他のタグをすべて消去し、 それでも問題が発生するかどうか確認するなどして、 他の要素が影響を及ぼしてる可能性をなるべく排除すべき。
605 名前:nobodyさん mailto:sage [2009/07/16(木) 03:18:17 ID:???] >>604 ありがとうございます。 今日会社で試してみます。
606 名前:nobodyさん mailto:sage [2009/07/16(木) 09:29:33 ID:???] >>600 レガシーなって、もともとはどのバージョンで作ってあったんだ? それはWEBアプリで作ってあったのか、WEBサイトでつくってあったのか? >>602 俺がエスパーするに、元がWEBアプリだったのを、今はWEBサイトで修正しようとしてる 今修正した部分はWEBサイトなんで、アプリケーション.DLLに反映されない 既存部分はWEBアプリなんで、アプリケーション.DLLへの参照がないと動かない ソース全部コピーしたってことは、今全部WEBサイトになったんで動いてる ま、こんなとこだろう
607 名前:590 mailto:sage [2009/07/16(木) 16:43:13 ID:???] >>606 そうですね。*.slnファイルも貰ったのでそのまま開いたのですが、こちらで空のwebサイト、webアプリを作成して比較してみると、webサイトの*.slnのようです。 これで開発してる、って言ってたんだけどなぁ・・・。
608 名前:nobodyさん mailto:sage [2009/07/16(木) 19:05:01 ID:???] >>606 その可能性が高そうだね つかwebアプリをwebサイトに移植しても、そのままで動作するんだな
609 名前:nobodyさん mailto:sage [2009/07/16(木) 22:19:36 ID:???] VS2005は知らんが、VS2008でWebサイトを作成してビルドすると 勝手にbinフォルダが作成されてる。その中にaspxに付随する.csやAPP_CODE配下のクラスファイルが コンパイルされたdllが放り込まれる。aspxのヘッダはこのbinフォルダのdllを見に行くように全て書き換えられる。 別にビルドしなくても、.csのソース付きaspxをWebサーバに配置しても IISとASP.NETは普通に解釈してくれる(まぁビルドするのと同じことしてるんだろけど) 正式リリース時は速度&セキュリティを考えてビルド方式にしたほうがいいよな。。
610 名前:nobodyさん mailto:sage [2009/07/16(木) 22:25:32 ID:???] VS2008のWebサイトで、ビルドしても、リビルドしても、binフォルダもできないし、dllもできないぞ?
611 名前:nobodyさん mailto:sage [2009/07/16(木) 23:25:29 ID:???] >>609 お前の言うWebサイトとは、VSでのプロジェクトの種類としてのWebサイトか? 一般的な意味でのWebサイトか? 一般的な意味でのWebサイトやWebアプリって言葉と VSでプロジェクトの種類としてのWebサイトとWebアプリってのは別の話だぞ binフォルダにDLL作るのはWebアプリだ。ソース修正したらビルドしないとDLLに反映されない WebサイトではDLLは通常見えるところには作られてない。ソース修正したら自動的にコンパイルされ反映される これを任意のタイミングで指定したところにDLL作らせるのがプリコンパイル 実際のところはWebアプリかWebサイトかは、VSが.ASPXのページディレクティブをどうするかだけで ASP.NETは各ページの指定通りに動く。なので混在してても動く
612 名前:nobodyさん mailto:sage [2009/07/16(木) 23:35:34 ID:???] >>610 悪かった。ビルド→Webサイトの発行でやってみてくれ >>611 VSのプロジェクトのWebサイトですよ
613 名前:nobodyさん mailto:sage [2009/07/17(金) 00:38:13 ID:???] それは発行するとプリコンパイルされるだけの話
614 名前:nobodyさん mailto:sage [2009/07/17(金) 00:40:18 ID:???] それぞれのメリット ・Web サイトの発行ユーティリティを使用する利点 プリコンパイル プロセスにより、コンパイル時エラー、および Web.config ファイルと他の非コード ファイル内の潜在的なエラーを検出できます。 ソース コードは、.aspx ファイル内のマークアップを含め、Web サイトから削除されます。 これにより、知的財産を保護でき、第三者がサイトのソース コードにアクセスしにくい状況を作ることができます。 サイト内のページが既にコンパイルされているため、最初の要求時にページを動的にコンパイルする必要がありません。 これにより、ページの初期応答時間を短縮できます。ただし、ページが動的にコンパイルされる場合でも、以降の要求についてはその出力はキャッシュされます。 ・Web サイトの発行ユーティリティを使用する欠点 指定する発行オプションによっては、サイトを変更する際、再コンパイルが必要になる場合があります。 したがって、サイトの開発中、頻繁に変更を加えるような場合にWeb サイトの発行ユーティリティを使用することは実用的ではありません。 Web サイトの発行ユーティリティでは、コンパイル済みサイトをリモート サーバーに配置することはできません。 ローカル コンピュータまたはローカル エリア ネットワーク上の別のコンピュータにのみコピーできます。
615 名前:nobodyさん mailto:sage [2009/07/17(金) 01:10:21 ID:???] >>614 それはMSのコメントなのか? >Web サイトの発行ユーティリティでは、コンパイル済みサイトをリモート サーバーに配置することはできません。 発行ユーティリティでFTP経由を指定できるんだが、これはリモートサーバとはいわないのか
616 名前:nobodyさん mailto:sage [2009/07/17(金) 01:15:08 ID:???] すまんVWDの話な
617 名前:nobodyさん mailto:sage [2009/07/17(金) 01:30:49 ID:???] 説明がめんどいからURLだけ msdn.microsoft.com/ja-jp/library/bb398992.aspx VWDじゃなくても、発行ユーティリティを使用した欠点に、 >Web サイトの発行ユーティリティでは、コンパイル済みサイトをリモート サーバーに配置することはできません。 >ローカル コンピュータまたはローカル エリア ネットワーク上の別のコンピュータにのみコピーできます。 の記述はあるな FTPの利用は、Webサイトのコピーツールのほうらしいなぁ
618 名前:nobodyさん mailto:sage [2009/07/19(日) 17:06:01 ID:???] 「検索」ボタンを押されたときにSQLを実行して実行結果をGridViewに描画させたいです。 SQLは、ユーザが指定した検索条件でいろいろ動的に変えたいので SqlDataSourceのSelectCommandでは対処できないのかな?と思ってます。 そこで、「検索」ボタン押下されたときにポストバック処理の流れで GridViewのDataSouceにArrayとかそんなようなオブジェクトを渡して描画させたいです。 そんなようなやり方でいいんですかね?
619 名前:nobodyさん mailto:sage [2009/07/19(日) 19:03:15 ID:???] >>618 基本的にはそれでいいが、SQL Injectionには気をつけろ
620 名前:nobodyさん mailto:sage [2009/07/19(日) 19:04:33 ID:???] ありがとん
621 名前:nobodyさん mailto:sage [2009/07/19(日) 19:30:24 ID:???] 単に検索条件変えるだけでSQL文の構造が変わる訳じゃないのなあら SqlCommand の Parameter 使うとか。
622 名前:nobodyさん mailto:sage [2009/07/19(日) 23:37:25 ID:???] 面倒かもしれないけど、自前のクエリ実装と、Repeaterの組み合わせのほうがいいと思うんだけどなぁ
623 名前:nobodyさん mailto:sage [2009/07/20(月) 01:35:00 ID:???] >>622 そんなんわかるほどスキルないもん。 ヒントだけでもいいから教えてください。
624 名前:nobodyさん mailto:sage [2009/07/20(月) 16:03:44 ID:???] >>623 プロジェクトのデータセットを追加して、GridViewにBindするだけ 何かを選択させて条件で表示させたいなら、DataTable.Select("Query")を利用すればいい
625 名前:nobodyさん mailto:sage [2009/07/20(月) 16:45:16 ID:???] >>624 ありがとうございます。 キーワードが増えたのでそれで勉強してみます
626 名前:nobodyさん mailto:sage [2009/07/20(月) 23:36:16 ID:???] >>624 SqlDataSourceなりObjectDataSourceなり データソースを使わせた方がいいと思うが…。 ページングができませんだの、編集ボタンでエラーが出ますだの言われかねんぞ。
627 名前:nobodyさん mailto:sage [2009/07/21(火) 13:52:20 ID:???] ASP.NETのプロジェクトを作成して、そのなかでSQL ServerのDBに対して「ADO.NET Entities Data Model」 LINQでアクセスしています。 このDBを定期的に掃除するコードを実行したいので、タスクスケジューラから実行できる、 コンソールアプリのプロジェクトを作成しました。このプロジェクトから、↑のASP.NETのプロジェクトを プロジェクト参照した場合、 new XXXXDatabaseEntities() のところで、TypeInitializationExceptionが発生します。 ASP.NET側のプロジェクトのWeb.Configにあった接続文字列をこのコンソールアプリのプロジェクトの App.Configにコピペしてきたのですが、それでは不十分なのでしょうか?
628 名前:nobodyさん mailto:sage [2009/07/21(火) 17:13:29 ID:???] >>627 いま気づいたが、ひょっとしてDLL側にconfigを用意してそこに接続文字列を書かないといけないのか・・。
629 名前:627 mailto:sage [2009/07/21(火) 18:40:41 ID:???] 解決しました。 ・DllのConfigは書いても無駄 ・App.Configの内容がXXX.exe.configにビルド時にコピーされる この2つを理解していなかったのが原因でした。
630 名前:nobodyさん mailto:sage [2009/07/21(火) 19:36:42 ID:???] >このDBを定期的に掃除するコードを実行したいので、タスクスケジューラから実行できる、 >コンソールアプリのプロジェクトを作成しました。 ストアドプロシージャで作成してSQLのjobから実行したほうがいいんでないの?
631 名前:627 mailto:sage [2009/07/21(火) 20:01:58 ID:???] >>630 ストアドプロシージャは書くのが面倒&書き慣れていないので、LINQで書きたいのです。 また、ログをDBに出力するメソッドなどは既に用意してあるので、 出来ればそのメソッドを用いて、DBの掃除をしたときにログを出力したいのです。 ところで、SQLのjobなら定期的に実行する仕組みがIISかSQL Serverかに搭載されているのですか?
632 名前:nobodyさん mailto:sage [2009/07/21(火) 20:30:30 ID:???] うろ覚えですまん MSSQLには定期実行するjobの機能がある。ただしExpress以上。 jobがなくても、SQLCMDだったかなで、別途ファイルに保存したクエリを実行できるから、 これをOSのタスクスケジューラーで実行するという方法もあったはず ストアドプロシージャでも、SQL/CLRを使えば、.NETが使えるから、 Linq To Entitiesも、ログを残すこともできるんでないかな。 .NET3.5でSQL/CLR使ったことないからよくわからん。
633 名前:627 mailto:sage [2009/07/21(火) 20:44:49 ID:???] >>632 ああ、SQL Serverにジョブを定期実行する仕組みがあるのですね…。 これは知りませんでした。勉強になりました。
634 名前:nobodyさん mailto:sage [2009/07/23(木) 06:02:37 ID:???] >>631 自分はストアド派だなぁ その「DBの掃除」がストアド化されていて 後で「ログを出力」という要件が追加になった場合、 ストアドの中だけ弄れば済む。 「後で要件追加(変更)」なんて設計者としては最初から織り込まないといけないと思う。 →ストアド内でログ出力するロジックを追加した方が総工数は下がる
635 名前:627 mailto:sage [2009/07/23(木) 13:07:42 ID:???] >>634 > →ストアド内でログ出力するロジックを追加した方が総工数は下がる それはストアドを駆使して書いてある場合の話であって、ASP.NETでの開発の場合、 ストアド使わずにLINQで殴り書きするほうがインテリセンスも使えて生産性が高いように思うのだが。
636 名前:nobodyさん mailto:sage [2009/07/23(木) 14:04:17 ID:???] つSQL CLR
637 名前:627 mailto:sage [2009/07/23(木) 14:25:10 ID:???] >>636 SQL CLRは技術的に見ても面白いテクノロジーですが、 LINQに比べると書きやすさがずいぶん劣るように思います。
638 名前:nobodyさん mailto:sage [2009/07/23(木) 15:01:03 ID:???] コーディングのし易さ、早さ、書きやすさを最大限に追求することで、 プロジェクト全体の保守を含めた生産性の高さが最大になる案件やシステムなら、 そうすればいいじゃんとしか言えない。
639 名前:627 mailto:sage [2009/07/23(木) 15:36:04 ID:???] >>638 ああ、ええ、まあ、そうですよね・・。 もう少し生産的な話として・・ LINQで書いたものはCLRに変換されてserver sideで実行されるのですから、 ストアドプロシージャがLINQで書ければ便利な気がするのですが、どうでしょう?
640 名前:nobodyさん mailto:sage [2009/07/23(木) 15:42:28 ID:???] データベーステクノロジの使い分けとかみたいなのが 赤間さんとかの対談の形で MSDN のページに載ってたんだけど 今探したら見あたらないな
641 名前:627 mailto:sage [2009/07/23(木) 15:49:30 ID:???] >>640 これのことですかね? msdn.microsoft.com/ja-jp/data/dd919164.aspx
642 名前:nobodyさん mailto:sage [2009/07/23(木) 16:03:33 ID:???] そうそう、それそれ。
643 名前:nobodyさん mailto:sage [2009/07/23(木) 16:11:21 ID:???] 分業が必要な規模のアプリの場合、 その複数のプログラマがみんな美しいSQL文を書けるわけじゃないし マニュアル等々で均一化するのも大変 1人のデータベーススペシャリストに 美しいSQL文でストアド作らせてた方が効率いいだろ、と感じる あと、ASPの場合、外部からのハックキングを想定せねばならず データベースへのアクセス権限としてテーブルへの直アクセスを許したくない
644 名前:nobodyさん mailto:sage [2009/07/23(木) 16:15:12 ID:???] 仕様変更でDBのフィールドが一つ増えるたびに、 関係するクライアントアプリやASP.NETに記述したlinqをすべて書き直すなら、それでもいいんじゃね? 単一クエリなら問題ないが、1行の操作が他のテーブルに影響を与えるなら、 ストアドプロシージャやビューをフルに活用したほうが、 処理をDB内にカプセル化できるから、仕様が変更されても、 アプリケーションを変更する必要がないし他でも簡単に使いまわすことができる。 その典型例がDBを掃除するコード。 引数が必要ないからアプリ側に影響を与えないし、 ループして複数の行に対して処理するだろうからストアドのほうが高速だし、 トランザクションも明示的に処理ができる。
645 名前:nobodyさん mailto:sage [2009/07/23(木) 16:16:25 ID:???] 一つのページで大量のクエリかけなきゃいけないときってどうしてるの? select * from a; select * from b; ... って感じでやって取り込むのがいいの?
646 名前:627 mailto:sage [2009/07/23(木) 16:25:09 ID:???] >>643-644 > 仕様変更でDBのフィールドが一つ増えるたびに、 > 関係するクライアントアプリやASP.NETに記述したlinqをすべて書き直すなら、それでもいいんじゃね? これについてですが、私の場合、DBにアクセスするコードは、サブのプロジェクトを作ってそこに集約させてあるので、 DBのフィールド1つごとに修正する箇所があちらこちらに発生するということはないです。 ただ、ストアドで処理をDB内にカプセル化するという発想やDBのスペシャリストにストアドを書かせるという発想は 私にはなかったので643,644は本当に参考になりました。ありがとうございます。
647 名前:nobodyさん mailto:sage [2009/07/23(木) 16:31:51 ID:???] >>645 取得したいデータによって、動的に取得したいテーブルが変化するとかへんな設計してなければ、 二つのテーブルから合計値を取得するとか、簡単なものなら クラスにクエリをたくさん記述して、各ページで再利用してる場合もある ただ、複雑な計算が必要だったり、テーブル数が多くなる場合には、 MSSQL側に、その計算式をまるごとビューとして登録するか、 テーブル値関数として登録してる。 プログラム側では、一つの表として取得できるのでそれを描画するだけ。
648 名前:nobodyさん [2009/07/23(木) 16:36:22 ID:FURNmJTN] VS2005(VB)で開発しています ドロップダウンリストを使用してデータを格納しているのですが 画面上からドロップダウンリストを操作した時に、表示される項目の向きが 常に下方向のみ表示できる方法はないでしょうか? ________ [_______]▼ 項目A 項目B 項目C このように表示したいのですが・・・。 現状だと▼ボタンを押して表示されるデータが、リストボックスの中央から 表示されているような状況です 宜しくお願い致します
649 名前:nobodyさん mailto:sage [2009/07/23(木) 16:36:55 ID:???] >>646 それだと、仮にクライアントアプリだと、修正されるたびに、すべてのPCにデプロイする必要があるから面倒 DBの掃除コードはコンソールアプリからだけの実行かもしれないが、 仮にコンソールアプリからでもASP.NETからでも利用したい機能が発生した場合、 一つのプロジェクト内のクラスが変更になれば、両方をデプロイなり発行しなくちゃいけない。 DBに登録すれば、それに関するストアドの修正だけで済むので、 クライアントもASP.NETもコードを変更する必要がないので。
650 名前:627 mailto:sage [2009/07/23(木) 17:04:52 ID:???] >>649 ああ、なるほど。クライアントアプリのときはそうでしょうね。
651 名前:nobodyさん mailto:sage [2009/07/23(木) 17:10:18 ID:???] あんまりストアドに頼ると、DBMSを変更しづらくなるのがやだなあ。 よほどの理由がない限り、DBMSへの機能依存を前提とした設計は 避けたほうが無難じゃね?
652 名前:nobodyさん mailto:sage [2009/07/23(木) 17:18:22 ID:???] >>650 コンソールとASPでやってて、SQLを別プロジェクトにしてる時点で、 同じDLLをASPとコンソールの二つからみてるわけだから同じじゃん 異なるバージョンのDLLで稼働してるのが気持ち悪くない人なら別にいいけど。 >>651 DBそのものの変更の可能性を考えるのなら、 使用言語が変更しづらくなる可能性も考慮しなきゃw ストアドなら、そこにアクセスして操作できる言語なら 言語に依存せずに利用することができるとも言えるw
653 名前:627 mailto:sage [2009/07/23(木) 17:25:10 ID:???] >>652 > 同じDLLをASPとコンソールの二つからみてるわけだから同じじゃん サーバーサイドだけならdeployする手間が、普通のクライアントアプリとは違うので >>649 の「それだと、仮にクライアントアプリだと、修正されるたびに、すべてのPCにデプロイする必要があるから面倒」 という問題は無いかな、と思いました。 > 異なるバージョンのDLLで稼働してるのが気持ち悪くない人なら別にいいけど。 この部分がいまひとつ理解できていないのですが、私の構成は次のようになっています。 コンソールプロジェクト = DBの掃除を行なうコードを書いたプロジェクト(A) + DBへアクセスするためのサブプロジェクト(B) ASP.NETのプロジェクト = 普通のASP.NETのプロジェクト(C) + DBへアクセスするためのサブプロジェクト(D) 上の B = D で、これはどちらも同じバージョンのDLLなのですが・・。
654 名前:nobodyさん mailto:sage [2009/07/23(木) 17:34:37 ID:???] >>653 別に、あなたのやり方を否定してるわけでも、自分のやり方を推奨してるわけじゃなくて、 相反する考え方があるという事なんで、あくまで一般論の話ね。 どんな想定かわからないけど、複数のものを変更しなくちゃいけない場合、 その時点で変更し忘れ等のミスが発生する可能性が高まるということ。 例えばwebサーバが複数あるとか。 >上の B = D で、これはどちらも同じバージョンのDLLなのですが・・。 ASP.NETのプロジェクトの開発で何か変更になったとき、 サブプロジェクトDのDLLを変更するのはいいけど、 その時点でBに反映させなければ、異なるバージョンの物でそれぞれが動作している という気持ち悪い状況になるでしょ。 そういうやり方をしてるなら、Dが変更されたら、変更されたDLLをBとして反映する 必要があるから、結果的に複数のものを変更する必要があるんじゃないの?という話。 BとDが異なるバージョンのDLLで動作しているのが気持ち悪くない人というのは そういう意味。
655 名前:627 mailto:sage [2009/07/23(木) 18:10:04 ID:???] >>654 ああ、なるほど。意味がわかりました。 > その時点でBに反映させなければ、異なるバージョンの物でそれぞれが動作している > という気持ち悪い状況になるでしょ。 確かにそれはそうですね。 私はdeployの作業自体はスクリプトを書いて自動化してあるのですが、そこに書き忘れたら、 というのはありますね。
656 名前:nobodyさん mailto:sage [2009/07/23(木) 18:33:32 ID:???] というか、Linq To SQLは終了の方向だから、 EntityFrameworkのほうで頑張るしかないな
657 名前:nobodyさん mailto:sage [2009/07/23(木) 21:15:25 ID:???] >652 DBMSは導入先の環境・都合で変わりうるでしょ。開発言語に関してはそれはまず有り得ない。 大体、「開発言語を変更しろ」なんてのは事実上「1から作り直せ」と同義なんだから、 ストアド部分だけ流用できたって、たいして嬉しくないよ。
658 名前:nobodyさん mailto:sage [2009/07/23(木) 21:33:24 ID:???] DBMSが具体的に何を差してるかわからんが、 データベースのソフト(MySQLたのOracleだのMSSQLだの)を差してるなら、 導入先の環境、都合でこれらがそんな頻繁に変わるか? データだって移行せにゃいかんし、 そもそもクエリだってデータベース間で関数名や、その引数なんかに違いがあるんだから、 言語が統一ならどんなDBであってもまったく変わらないなんて完全な錯誤だと思うんだけど。 あるシステムでデータベースを異なる製品に変更しろなんて要求があったら、 1から作り直すのと同じだと思うし、あまりの仕打ちにそれ以上に腹が立つわw
659 名前:nobodyさん mailto:sage [2009/07/23(木) 22:08:49 ID:???] いつだってフルスクラッチ大好きな俺は大歓迎だ! ただし、金と時間はくれよな!
660 名前:nobodyさん mailto:sage [2009/07/24(金) 12:02:04 ID:???] ASP.NETで開発しています。 JavaScriptで使っているデータを1日1回、DBから生成して .js ファイルとして書き出しておくことを考えています。 その .js ファイルを IIS7でホスティングすることになるのですが、 「DBから生成して .js ファイルとして書き出しておく」ときに、テンポラリに書き出して、 .NET FrameworkのFile.Copy(src , dst, overwrite = true)で前のファイルに上書きしようと考えています。 ところが、このファイルの書き出し中にこのファイルをクライアントブラウザから要求されて IIS7が読み込もうとしたとき、コピー中の中途半端なファイルがクライアントブラウザに渡されます。 この挙動は望むものではなくて、出来れば、コピー前の古いファイルか、コピー後の新しいファイルかの どちらかをクライアントブラウザに渡して欲しいのです。 これはIIS7の設定で解決するのでしょうか?それとも、File.Copyを使うのが良くないのでしょうか?
661 名前:nobodyさん mailto:sage [2009/07/24(金) 15:08:26 ID:???] rename してからコピーして rename コピー中はファイル存在せず
662 名前:nobodyさん mailto:sage [2009/07/24(金) 15:10:12 ID:???] いや、少し違うか hoge.new で予め作っておく hoge.js → hoge.bak にリネーム hoge.new → hoge.js にリネーム hoge.bak を削除
663 名前:nobodyさん mailto:sage [2009/07/24(金) 17:35:30 ID:???] >>660 javascriptって.jsしか無理なんだっけ? 自分なら.jsファイル(もしくは変更されるデータ)をデータベースから取得し、 アクセスがあるたびに動的に生成するな ファイルを作成するプログラムが、バッチ処理の役割も果たしていて、 日に1回の集計処理を行ってるとすると、若干厄介かもしれないけど
664 名前:660 mailto:sage [2009/07/24(金) 18:02:37 ID:???] >>661-662 それだと hoge.js → hoge.bakにrename中にアクセスされるとnot foundになるのが 嫌なのです。その2つのrenameは実際にはほぼatomicに行なわれるとは思うのですが。 >>663 確かにデータベースから流しても良いのですが、そのオーバーヘッドが嫌なのです。 (自己解決) NTFSは次のようにtransactionをサポートしているらしいので 面倒ですが、これを使うことにします..。 Enhance Your Apps With File System Transactions msdn.microsoft.com/en-us/magazine/cc163388.aspx
665 名前:nobodyさん mailto:sage [2009/07/24(金) 18:24:53 ID:???] おーNTFSでファイルのトランザクションができるのかw 同じ.jsだとIEでキャッシュ扱いされそうな気がするんだが、その辺はどうなんだろ レポート頼む
666 名前:660 mailto:sage [2009/07/24(金) 19:23:06 ID:???] >>665 > 同じ.jsだとIEでキャッシュ扱いされそうな気がするんだが、その辺はどうなんだろ それはIISのファイルのexpireの設定次第だと思います。
667 名前:nobodyさん mailto:sage [2009/07/24(金) 19:40:49 ID:???] へーその都度、生成されるaspxでも?
668 名前:660 mailto:sage [2009/07/24(金) 20:25:23 ID:???] >>667 forums.techarena.in/software-development/1193025.htm にサンプルがありますがファイルの拡張子ごとにexpireする時間を設定できるようです。 このうちjsのexpireを1hourぐらいに設定しておけば、>>665 の問題は解決するのではないかと。
669 名前:nobodyさん [2009/07/24(金) 22:19:14 ID:1HXeI2xc] 生成し終わったファイルをコピーして別のファイル上書きするだけなら そんな問題おきなさそうだけどなぁ。 ファイルシステム書き換えるだけでしょ。 Windows の Copy コマンドとか使えないのかな。
670 名前:660 mailto:sage [2009/07/24(金) 23:37:28 ID:???] >>669 > 生成し終わったファイルをコピーして別のファイル上書きするだけなら > そんな問題おきなさそうだけどなぁ。 起きます。System.IO.File.Copyでコピーした場合、ファイルコピーが開始されると 同時に、クライアントブラウザへの古いほうのファイルの転送が中断され、 結果として中途半端なファイルがクライアントブラウザに渡されます。 WindowsのCopyコマンドというのが何を指しているのかわかりませんが、 DOSプロンプトのcopyコマンドのことでしたら、これと同じ挙動のようです。
671 名前:nobodyさん [2009/07/25(土) 01:29:42 ID:WtyVOn10] >自分なら.jsファイル(もしくは変更されるデータ)をデータベースから取得し、 >アクセスがあるたびに動的に生成するな うわ、死んだ方がいいなこいつw
672 名前:nobodyさん mailto:sage [2009/07/25(土) 02:03:30 ID:???] >>671 なんで? それが駄目ならデータベースからデータを取得して、 動的に中身を生成するasp.netの全否定になると思うけど?
673 名前:nobodyさん mailto:sage [2009/07/25(土) 02:15:27 ID:???] ASP.NETの動作にDB接続が必須だったとは初耳だ
674 名前:nobodyさん mailto:sage [2009/07/25(土) 02:19:13 ID:???] ストアドってよく使われるもんなの? 個人的には全部ソースで作ればいいじゃんと思うんだけども。
675 名前:nobodyさん mailto:sage [2009/07/25(土) 02:27:23 ID:???] >>673 データベースからデータを取得してhtmlを生成する仕組みで動作してる aspx全般のことを言ってるのに、asp=db必須なんて言うのは論理のすり替え
676 名前:nobodyさん mailto:sage [2009/07/25(土) 03:11:46 ID:???] >>674 ストアドに限らず、viewやテーブル値関数、トリガーを含めてなら便利だし、結構使う 問題なく動作してるなら、別にソースからでもいいんじゃない? メリットはデータベースを一つのオブジェクトとみた場合、データの操作はデータに近いところで行うという、 可能な操作や状態のみ閲覧でき、実装を隠蔽できるOOPのメリットと併せて考えればわかりやすいと思うけど あとは複数クエリの実行なら、ストアドのほうが処理が速いということかな ASP.NETとはいえ、DBとWEBサーバは別だろうから、DB-WEB間のネットワークトラフィックを最低現にできるメリットもある
677 名前:nobodyさん mailto:sage [2009/07/25(土) 03:12:12 ID:???] >>675 んじゃーお前は何でもかんでもDBに突っ込んで毎回取りに逝けばいいよ。
678 名前:nobodyさん [2009/07/25(土) 08:21:37 ID:BV/bwvMa] 俺頭悪いから >>675 からなんで >>677 な意見が出るのか理解できない…。 >>673 はまぁ極端ではあるけど >>672 の文章自体誤解を受けかねない部分はあるからまぁ仕方ないのかなって気はするけど。 まぁでもなんかとにかくかみつきたくてかみついてるような印象はあるか。
679 名前:nobodyさん mailto:sage [2009/07/25(土) 11:37:23 ID:???] >>671 はjs「ファイルを動的に生成」ってところに 突っ込みたかったんだと思ったが…
680 名前:nobodyさん mailto:sage [2009/07/27(月) 09:33:53 ID:???] >>664 どこまで極めないといけないのか知らんが js ファイルを作成する都度、別ファイル名にして、 aspx 側で食わせる js ファイル名を動的に変更させたらどう?
681 名前:sage mailto:sage [2009/07/27(月) 10:06:33 ID:???] TextBoxにもLabelにもなるユーザコントロールって作れないんスかね? ReadOnlyのプロパーティをtrueにすればLabel、falseにすればTextBox、みたいな。 TextBoxを変更不可にするんじゃどうしても見た目的に駄目なケースがあるんで。
682 名前:nobodyさん [2009/07/27(月) 10:34:22 ID:lA2VJ4lQ] 動的にコントロール追加すればいいんじゃないの
683 名前:nobodyさん mailto:sage [2009/07/27(月) 14:43:15 ID:???] Repeaterでテキストボックスを動的に生成しています。 ボタンが押されたら内容をチェックして、何らかのエラーがあればエラーのあったテキスト ボックスの背景色を変えたいんですが、方法が分かりません。 テキストボックスは動的に生成しているので、 プロパティで変更することも出来ないみたいで。
684 名前:nobodyさん mailto:sage [2009/07/27(月) 15:31:56 ID:???] >>681 作れなくはないが、見た目だけならCSSで無理か? >>683 FindControl
685 名前:nobodyさん mailto:sage [2009/07/27(月) 15:33:45 ID:???] >>681 TextBoxとLabelを配置したUserControl作って、ReadOnlyプロパティとTextプロパティを作って、 TextBox.Visible = !ReadOnly Labe.Visible = ReadOnlyすればいいじゃない >>683 public List<TextBox> TextBoxList = new List<TextBox>(); protected void Page_Load(object sender, EventArgs e) { for (int i = 0; i < this.Repeater1.Items.Count; i++) { RepeaterItem ri1 = this.Repeater1.Items[i]; TextBox textBox = (TextBox)ri1.FindControl("TextBox1"); TextBoxList.Add(textBox); } } あとはお好きにどぞ
686 名前:nobodyさん mailto:sage [2009/07/27(月) 15:59:05 ID:???] >>685 683は、validationをclient-sideで行なって、かつ、TextBoxとLabelとの切り替えもclient-sideで 行ないたいということなんじゃない? まあJavaScriptで書くしかないわな・・。 ASP.NET、client-sideで処理するためのtool setが用意されていないので 何かとJavaScriptを書かないといけなくて面倒なんだな。
687 名前:nobodyさん mailto:sage [2009/07/27(月) 17:02:42 ID:???] このスレの>>200 近辺にあるjQueryを使えば大丈夫
688 名前:nobodyさん mailto:sage [2009/07/27(月) 17:09:31 ID:???] >>687 何がjQueryで大丈夫なのかは知らないが、 あまりにjQueryとの親和性が悪いので ASP.NET4.0ではjQueryを統合するとか何とか。
689 名前:nobodyさん mailto:sage [2009/07/27(月) 17:42:49 ID:???] ×あまりにjQueryとの親和性が悪いので ○ASP.NET AJAXがあまりにjQueryとの親和性が悪いので
690 名前:nobodyさん mailto:sage [2009/07/27(月) 20:19:11 ID:???] >>686 UserControl、ReadOnlyプロパティから考えるにサーバコントロールじゃないの? そもそもClientでValidationを行うのが間違いだし 超簡単にやるなら、こんなでいいんじゃない。 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Label ID="Label1" runat="server" Text="Label" Visible="False"></asp:Label> public partial class WebUserControl : System.Web.UI.UserControl { public bool ReadOnly { get { return this.Label1.Visible; } set { this.Label1.Visible = value; this.TextBox1.Visible = !value; } } public string Text { get { return this.Label1.Text; } set { this.Label1.Text = value; this.TextBox1.Text = value; } } }
691 名前:nobodyさん mailto:sage [2009/07/27(月) 21:07:41 ID:???] >>690 > そもそもClientでValidationを行うのが間違いだし 何故間違いなの?余計なトラフィック増やしたくないから、まずclient-sideで行なって、 サーバーはサーバーで再度validationを行なうのが常識でしょ。
692 名前:nobodyさん mailto:sage [2009/07/27(月) 21:20:16 ID:???] >>691 >何故間違いなの? ああ正確にはClient「だけ」だな 言葉足らずですまんかった >余計なトラフィック増やしたくないから、まずclient-sideで行なって、 >サーバーはサーバーで再度validationを行なうのが常識でしょ。 入力内容をポストしてValidateするのと、JavaScriptでチェックするのの、 どちらが容量が少ないかだけの観点なら、失敗される予想回数と、 Postされるデータの容量と、Validationに必要なJavaScriptの容量が関係するから、 一概にClientでチェック=トラフィックが低いとは言えないけどね
693 名前:nobodyさん mailto:sage [2009/07/27(月) 23:45:26 ID:???] >>692 > 一概にClientでチェック=トラフィックが低いとは言えないけどね ああ、なるほど。トラフィックという観点ではそうだね。 実際は、ASP.NET ajaxでも、アクセスされるごとにサーバー側では モデル等を再構築するのでアクセスごとのサーバーの負荷は並々ならぬものがあるので なるべくならclient-sideで、というのは信念としてあるわけだけど。
694 名前:nobodyさん mailto:sage [2009/07/27(月) 23:49:45 ID:???] >>671 動的生成したjsの内容をいキャッシュしとけばいいよ。 ってか良くやる方法だよ。 あんまりキャッシュとか活用されないことが多かったりするけどね。