none
DatabaseからASP.NETにて開発したいのですが RRS feed

  • 質問

  • データベースから取得したデータをASP.NETで最低限のデータベースのアクセスであとはローカルでいろいろと操作したい場合、javascript, ajaxを使ってうまくやる方法はありますか?ちょっと質問が漠然としているので、全体の構成のような感じでアドバイスをいただけたらと思っています。よろしくお願いします。

    2007年3月19日 0:53

回答

  • SqlCacheDependency
    SqlDependency
    SqlNotificationRequest
    も押さえておくとよいでしょう。
    SELECT * FROM xxxx は使えなくなりますが、マスター系なら項目も少ないし、更新頻度も少ないので

    SELECT [スキーマ名].[項目1],[スキーマ名].[項目2] FROM [スキーマ名].[テーブル名] WHERE [スキーマ名].[項目3] = 0

    のように省略が一切認められない SELECT 文になりますが、非常に便利です。

    2007年3月19日 7:56
  •  KentaroM さんからの引用

    ようはデータベースからどんな情報が、何軒あるかわからない訳ですから表の数を特定できないので、表示するには何軒あっても自動的に生成してくれるgridView系のものが楽なのですが、そのあとそこから掘り下げて行くにはなかなか難しいですね。

    キーで受け渡していきます。ユーザー情報でしたら、クリックした際に如何にユーザーIDを渡すかを考えます。ユーザーIDが渡ってくれば、そこからデータを読み、ユーザーに関する詳細ページなりを表示することができます。このユーザーIDを渡す方法が、前述しているように、LinkButtonのCommandArgumentに仕込んだり、HyperLinkのNavigateUrlにクエリー文字として仕込んだりするわけです。
    ようは、キーさえ受け取ってしまえば、あとはそこからデータを読めばいいのです。この辺りはWindowsフォームのプログラムとなんら変わりはありません。
    2007年3月19日 10:07
    モデレータ

すべての返信

  • 「ローカルで」というのはデータベースとの接続をできるだけしたくない、ということなのでしょうか、それともWebサーバとの接続をできるだけしたくない、ということなのでしょうか。
    ちょっとやりたいことがあいまいすぎてこのままではアドバイスのしようもないかと思います。

     

    2007年3月19日 1:40
  • UpdatePanelにGridViewを貼り付けたAjaxであっても、ローカルのみで作業をしているわけではありません。表示的に部分更新を行うので、見かけ上、サーバーとやり取りをしていないように見えるかもしれませんが、サーバーサイドでしっかりデータを読んでます。

    できるだけデータベースからデータを読まずにということになれば、データセットをSession変数に入れてしまうなどが考えられます。後はObjectDataSourceを使って、ページングの際などに必要最低限である、そのページで表示する分のみのデータを取得するなどです。

    2007年3月19日 1:46
    モデレータ
  • なるほど。dataSetをsession変数に入れてしまうという事ですね。gridViewについてなんですが、フォーラムサイトの様に取り込んできたデータにリンクをつけて移動させたいんですが(たとえばフォーラムサイトでuserNameやトピックのリンクから返信や、本文の観覧が出来るような感じ)、スマートタグ等を使うと新しい項目の追加ではそのカラムにLinkButton等を挿入できるのですが、いまいちどうやっていいのかわかりません。htmlソースの中でコードを追加しなくてはいけないのでしょうか?VS2005はどこまでがデザインに頼っていいのか、手作業が必要なのかの境界線が難しいですね。(と言っても2005から始めましたが・・・。)笑
    2007年3月19日 2:26
  • その後、いろいろ試していますが、databaseから取得したデータをDataListにバインドして、templateの編集から一度[]に入っているフィールドとlinkButtonにおきかえ、そのボタンにフィールドをバインドしたところうまく、取り込んだデータにリンクがつけられました。あとはそのリンク先を指定したいのです(たとえば、userNameにリンクがあるとして、その選択したuserのページに移動する等)がどうしたらよろしいのでしょうか???
    2007年3月19日 6:22
  •  KentaroM さんからの引用

    dataSetをsession変数に入れてしまうという事ですね。

    技術的には可能ですが、フォーラムなんかですと記事がいつ追加されるかわかりませんので、その都度データベースを読みに行った方が良いように思います。
     KentaroM さんからの引用

    gridViewについてなんですが、フォーラムサイトの様に取り込んできたデータにリンクをつけて移動させたいんですが(たとえばフォーラムサイトでuserNameやトピックのリンクから返信や、本文の観覧が出来るような感じ)、スマートタグ等を使うと新しい項目の追加ではそのカラムにLinkButton等を挿入できるのですが、いまいちどうやっていいのかわかりません。

    LinkButtonですと、デザイナからテンプレートの編集へと進んでいき、そこでCommandArgumentにIDをバインドさせることが可能です。このIDをRowCommandイベントで取り出して、いろいろと処理を行うことが可能です。
     KentaroM さんからの引用

    htmlソースの中でコードを追加しなくてはいけないのでしょうか?

    デザイナでできるところはそこで処理をして、その後必要があれば、HTML側を手で修正すれば良いと思います。
    2007年3月19日 6:25
    モデレータ
  • 都度データベースに問い合わせることには反対です。
    #貧弱なマシンだったら一発で Lock Wait で死んじゃいますし、DDos すれば楽勝で落とせます。

    この手のものならデータキャッシュ使う方が常道でしょう。
    特にマスター系なら、Application の Static なクラスでやる方法もありますし。

    2007年3月19日 6:56
  •  おがわみつぎ さんからの引用

    都度データベースに問い合わせることには反対です。
    #貧弱なマシンだったら一発で Lock Wait で死んじゃいますし、DDos すれば楽勝で落とせます。

    どのぐらいの規模のシステムが要求されるかにもよると思いますが、私は一般的なネット上の掲示板程度のことを想定していました。一般的なネット上の掲示板ですとテキストベースのCGIで動いているものも少なくないわけですし、このレベルのものであれば、その都度データを読みにいってもいいかな?と考えました。 参照系が中心であれば確かにキャッシュは有効な手段ですが、こちらからの書き込みなどのアクションでその内容が変化するものの場合、キャッシュが返って邪魔になる時があります。上手にキャッシュをコントロールできれば良いのですが、それがうまくできていないサイトもたまに見かけ、ユーザーを混乱させてしまいます。そういうわけで、ちょっと短絡的にその都度データを読みに行けばよいと考えてしまいました。

    おがわさんの発言から私もうっかりしていたのですが、キャッシュのことを実は忘れていました。SqlDataSourceになってから、比較的簡単にデータのキャッシュができるようになっています。検索した結果を何ページにも渡って表示する場合には、ぜひ、検討してみて下さい。
    自分も横着せずに、積極的にキャッシュとかつかうべきですね(^^; ちなみにSqlDataSourceのEnableCachingは既定でfalseです。

    おがわさん、フォロー、ありがとうございました。

    2007年3月19日 7:35
    モデレータ
  •  KentaroM さんからの引用
    あとはそのリンク先を指定したいのです(たとえば、userNameにリンクがあるとして、その選択したuserのページに移動する等)がどうしたらよろしいのでしょうか???

    移動したいのであれば、HyperLinkコントロールを使用して、そのNavigateUrlにIDなどのデータをクエリ文字列で含ませてしまう方がいいんじゃないでしょうか?
    LinkButtonでもItemCommandイベントで判断して、そこからResponse.Redirectすればどうようにできますが、前者のHyperLinkコントロールを使う方がすっきりするように思えます。ただ、URLにIDとかが出ちゃいますが。
    2007年3月19日 7:40
    モデレータ
  • SqlCacheDependency
    SqlDependency
    SqlNotificationRequest
    も押さえておくとよいでしょう。
    SELECT * FROM xxxx は使えなくなりますが、マスター系なら項目も少ないし、更新頻度も少ないので

    SELECT [スキーマ名].[項目1],[スキーマ名].[項目2] FROM [スキーマ名].[テーブル名] WHERE [スキーマ名].[項目3] = 0

    のように省略が一切認められない SELECT 文になりますが、非常に便利です。

    2007年3月19日 7:56
  • hyperLinkのNavigateUrlで移動は出来ましたが、そのクリックした例えばユーザー名の情報も一緒に移動するにはどうしたらいいのでしょうか??gridviewとかdataListなどで一気にデータを表示してしまうと、その後の細かい作業がどうしたらいいのかなかなかわかりにくいです。ようはデータベースからどんな情報が、何軒あるかわからない訳ですから表の数を特定できないので、表示するには何軒あっても自動的に生成してくれるgridView系のものが楽なのですが、そのあとそこから掘り下げて行くにはなかなか難しいですね。フォーラム等はレンタルサーバーもあるようで一から作る必要もないようですが。最近は。まあ知識としては知っておきたいです。
    2007年3月19日 9:32
  •  おがわみつぎ さんからの引用

    SqlCacheDependency
    SqlDependency
    SqlNotificationRequest
    も押さえておくとよいでしょう。
    SELECT * FROM xxxx は使えなくなりますが、マスター系なら項目も少ないし、更新頻度も少ないので

    なるほど。ありがとうございます。
    アプリケーションは動けば良いというものではないので、少しでも良いアプリケーションを提供できるようにがんばります。
    マスター系なんかは特に良さそうですね。今度、実装してみます。

    2007年3月19日 10:00
    モデレータ
  •  KentaroM さんからの引用

    ようはデータベースからどんな情報が、何軒あるかわからない訳ですから表の数を特定できないので、表示するには何軒あっても自動的に生成してくれるgridView系のものが楽なのですが、そのあとそこから掘り下げて行くにはなかなか難しいですね。

    キーで受け渡していきます。ユーザー情報でしたら、クリックした際に如何にユーザーIDを渡すかを考えます。ユーザーIDが渡ってくれば、そこからデータを読み、ユーザーに関する詳細ページなりを表示することができます。このユーザーIDを渡す方法が、前述しているように、LinkButtonのCommandArgumentに仕込んだり、HyperLinkのNavigateUrlにクエリー文字として仕込んだりするわけです。
    ようは、キーさえ受け取ってしまえば、あとはそこからデータを読めばいいのです。この辺りはWindowsフォームのプログラムとなんら変わりはありません。
    2007年3月19日 10:07
    モデレータ
  • なるほど。CommandArgument='<%#DataBinder.Eval(Container.DataItem,"EmployeeID")%>'の様にしたらクリック時に情報がうまく取り出す事が出来ました。<%#DataBinder.Eval %>がミソですね。なんとなく前が広がった気がします。ありがとうございました!

    2007年3月20日 4:38